Bug Summary

File:epan/dissectors/packet-ieee80211.c
Warning:line 18668, column 14
Potential leak of memory pointed to by 'tmp'

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -triple x86_64-pc-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name packet-ieee80211.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -mthread-model posix -mframe-pointer=none -fmath-errno -fno-rounding-math -masm-verbose -mconstructor-aliases -munwind-tables -target-cpu x86-64 -dwarf-column-info -fno-split-dwarf-inlining -debugger-tuning=gdb -resource-dir /usr/lib/llvm-10/lib/clang/10.0.0 -isystem /usr/include/glib-2.0 -isystem /usr/lib/x86_64-linux-gnu/glib-2.0/include -isystem /usr/include/libnl3 -D G_DISABLE_DEPRECATED -D G_DISABLE_SINGLE_INCLUDES -D WS_BUILD_DLL -I /home/remnux/Desktop/Thesis-Experiments/Third_Experiment/SAST_With_SRE/CVEs/CVE-2018-11360_Wireshark/Wireshark/build -I /home/remnux/Desktop/Thesis-Experiments/Third_Experiment/SAST_With_SRE/CVEs/CVE-2018-11360_Wireshark/Wireshark -I /home/remnux/Desktop/Thesis-Experiments/Third_Experiment/SAST_With_SRE/CVEs/CVE-2018-11360_Wireshark/Wireshark/epan -I /home/remnux/Desktop/Thesis-Experiments/Third_Experiment/SAST_With_SRE/CVEs/CVE-2018-11360_Wireshark/Wireshark/tools/lemon -I /home/remnux/Desktop/Thesis-Experiments/Third_Experiment/SAST_With_SRE/CVEs/CVE-2018-11360_Wireshark/Wireshark/build/epan/dissectors -I /home/remnux/Desktop/Thesis-Experiments/Third_Experiment/SAST_With_SRE/CVEs/CVE-2018-11360_Wireshark/Wireshark/epan/dissectors -D NDEBUG -U NDEBUG -internal-isystem /usr/local/include -internal-isystem /usr/lib/llvm-10/lib/clang/10.0.0/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -O2 -Wno-overlength-strings -Wno-long-long -Wno-pointer-sign -fdebug-compilation-dir /home/remnux/Desktop/Thesis-Experiments/Third_Experiment/SAST_With_SRE/CVEs/CVE-2018-11360_Wireshark/Wireshark/build/epan/dissectors -ferror-limit 19 -fmessage-length 0 -fvisibility hidden -fwrapv -fgnuc-version=4.2.1 -fobjc-runtime=gcc -fdiagnostics-show-option -vectorize-loops -vectorize-slp -analyzer-output=html -faddrsig -o /home/remnux/Desktop/Thesis-Experiments/Third_Experiment/SAST_With_SRE/CVEs/CVE-2018-11360_Wireshark/Wireshark/build/2025-03-25-092224-117897-1 -x c /home/remnux/Desktop/Thesis-Experiments/Third_Experiment/SAST_With_SRE/CVEs/CVE-2018-11360_Wireshark/Wireshark/epan/dissectors/packet-ieee80211.c
1/* packet-ieee80211.c
2 * Routines for Wireless LAN (IEEE 802.11) dissection
3 * Copyright 2000, Axis Communications AB
4 *
5 * Wireshark - Network traffic analyzer
6 * By Gerald Combs <gerald@wireshark.org>
7 * Copyright 1998 Gerald Combs
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; either version 2
12 * of the License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22 *
23 * Credits:
24 *
25 * The following people helped me by pointing out bugs etc. Thank you!
26 *
27 * Marco Molteni
28 * Lena-Marie Nilsson
29 * Magnus Hultman-Persson
30 */
31
32/*
33 * 10/24/2005 - Add dissection for 802.11e
34 * Zhu Yi <yi.zhu@intel.com>
35 *
36 * 04/21/2008 - Added dissection for 802.11p
37 * Arada Systems <http://www.aradasystems.com>
38 *
39 * 04/20/2013 - Added dissection of 802.11ad according to the 9th draft of the standard.
40 * Extended as a project in the Laboratory of Computer Communication & Networking (LCCN), Computer Science Department, Technion, Israel.
41 * Majd Omari <majd.omari@outlook.com>
42 * Jalil Moraney <moraney.jalil@outlook.com>
43 */
44
45/*
46 * Reference :
47 * The 802.11 standard is "free", 6 month after the publication.
48 *
49 * IEEE Std 802.11-2012: Revision of IEEE Std 802.11-2007
50 * include 10 amendments (802.11k,r,y,w,n,p,z,v,u,s) 802.11-2007
51 * include 8 amendments (802.11a,b,d,e,g,h,i,j) 802.11-1999
52 * http://standards.ieee.org/getieee802/download/802.11-2012.pdf
53 *
54 * WAPI (IE 68)
55 * http://isotc.iso.org/livelink/livelink/fetch/-8913189/8913214/8913250/8913253/JTC001-N-9880.pdf?nodeid=8500308&vernum=-2
56 */
57
58#include "config.h"
59
60#include <math.h>
61
62#include <epan/packet.h>
63#include <epan/capture_dissectors.h>
64#include <epan/exceptions.h>
65#include <wsutil/pint.h>
66#include <wsutil/str_util.h>
67#include <epan/addr_resolv.h>
68#include <epan/address_types.h>
69#include <epan/strutil.h>
70#include <epan/prefs.h>
71#include <epan/reassemble.h>
72#include "packet-ipx.h"
73#include "packet-llc.h"
74#include "packet-ieee80211.h"
75#include <epan/etypes.h>
76#include <epan/oui.h>
77#include <epan/crc32-tvb.h>
78#include <epan/crypt/wep-wpadefs.h>
79#include <epan/expert.h>
80#include <epan/conversation_table.h>
81#include <epan/uat.h>
82#include <epan/eapol_keydes_types.h>
83#include <epan/to_str.h>
84#include <epan/proto_data.h>
85
86#include "packet-wps.h"
87#include "packet-e212.h"
88#include "packet-sflow.h"
89#include "packet-gre.h"
90
91#include <epan/crypt/airpdcap_ws.h>
92
93void proto_register_ieee80211(void);
94void proto_reg_handoff_ieee80211(void);
95void proto_register_wlan_rsna_eapol(void);
96
97extern value_string_ext eap_type_vals_ext; /* from packet-eap.c */
98
99#ifndef roundup2
100#define roundup2(x, y)(((x)+((y)-1))&(~((y)-1))) (((x)+((y)-1))&(~((y)-1))) /* if y is powers of two */
101#endif
102
103/* bitmask for bits [l..h]
104 * taken from kernel's include/linux/bitops.h
105 */
106#define GENMASK(h, l)(((1U << ((h) - (l) + 1)) - 1) << (l)) (((1U << ((h) - (l) + 1)) - 1) << (l))
107
108/* Defragment fragmented 802.11 datagrams */
109static gboolean wlan_defragment = TRUE(!(0));
110
111/* call subdissector for retransmitted frames */
112static gboolean wlan_subdissector = TRUE(!(0));
113
114/* Check for the presence of the 802.11 FCS */
115static gboolean wlan_check_fcs = FALSE(0);
116
117/* Check the FCS checksum */
118static gboolean wlan_check_checksum = TRUE(!(0));
119
120/* Ignore vendor-specific HT elements */
121static gboolean wlan_ignore_draft_ht = FALSE(0);
122
123/* Ignore the Protection bit; assume packet is decrypted */
124#define WLAN_IGNORE_PROT_NO0 0
125#define WLAN_IGNORE_PROT_WO_IV1 1
126#define WLAN_IGNORE_PROT_W_IV2 2
127static gint wlan_ignore_prot = WLAN_IGNORE_PROT_NO0;
128
129/* Table for reassembly of fragments. */
130static reassembly_table wlan_reassembly_table;
131
132/* Statistical data */
133static struct _wlan_stats wlan_stats;
134
135/*-------------------------------------
136 * UAT for WEP decoder
137 *-------------------------------------
138 */
139static uat_wep_key_record_t *uat_wep_key_records = NULL((void*)0);
140static uat_t *wep_uat = NULL((void*)0);
141static guint num_wepkeys_uat = 0;
142
143static void *
144uat_wep_key_record_copy_cb(void* n, const void* o, size_t siz _U___attribute__((unused)))
145{
146 uat_wep_key_record_t* new_key = (uat_wep_key_record_t *)n;
147 const uat_wep_key_record_t* old_key = (const uat_wep_key_record_t *)o;
148
149 if (old_key->string) {
150 new_key->string = g_strdup(old_key->string);
151 } else {
152 new_key->string = NULL((void*)0);
153 }
154
155 return new_key;
156}
157
158static gboolean
159uat_wep_key_record_update_cb(void* r, char** err)
160{
161 uat_wep_key_record_t* rec = (uat_wep_key_record_t *)r;
162 decryption_key_t* dk;
163 guint dk_type;
164
165 if (rec->string == NULL((void*)0)) {
166 *err = g_strdup("Key can't be blank");
167 return FALSE(0);
168 }
169
170 g_strstrip(rec->string)g_strchomp (g_strchug (rec->string));
171 dk = parse_key_string(rec->string, rec->key);
172
173 if (dk != NULL((void*)0)) {
174 dk_type = dk->type;
175 free_key_string(dk);
176 switch (dk_type) {
177 case AIRPDCAP_KEY_TYPE_WEP0:
178 case AIRPDCAP_KEY_TYPE_WEP_401:
179 case AIRPDCAP_KEY_TYPE_WEP_1042:
180 if (rec->key != AIRPDCAP_KEY_TYPE_WEP0) {
181 *err = g_strdup("Invalid key format");
182 return FALSE(0);
183 }
184 break;
185 case AIRPDCAP_KEY_TYPE_WPA_PWD3:
186 if (rec->key != AIRPDCAP_KEY_TYPE_WPA_PWD3) {
187 *err = g_strdup("Invalid key format");
188 return FALSE(0);
189 }
190 break;
191 case AIRPDCAP_KEY_TYPE_WPA_PSK4:
192 if (rec->key != AIRPDCAP_KEY_TYPE_WPA_PSK4) {
193 *err = g_strdup("Invalid key format");
194 return FALSE(0);
195 }
196 break;
197 default:
198 *err = g_strdup("Invalid key format");
199 return FALSE(0);
200 break;
201 }
202 } else {
203 *err = g_strdup("Invalid key format");
204 return FALSE(0);
205 }
206 return TRUE(!(0));
207}
208
209static void
210uat_wep_key_record_free_cb(void*r)
211{
212 uat_wep_key_record_t* key = (uat_wep_key_record_t *)r;
213
214 if (key->string) g_free(key->string);
215}
216
217UAT_VS_DEF(uat_wep_key_records, key, uat_wep_key_record_t, guint8, 0, STRING_KEY_TYPE_WEP)static void uat_wep_key_records_key_set_cb(void* rec, const char
* buf, guint len, const void* vs, const void* u2 __attribute__
((unused))) { guint i; char* str = g_strndup(buf,len); const char
* cstr; ((uat_wep_key_record_t*)rec)->key = 0; for(i=0; ( cstr
= ((const value_string*)vs)[i].strptr ) ;i++) { if (g_str_equal
(cstr,str)) { ((uat_wep_key_record_t*)rec)->key = (guint8)
((const value_string*)vs)[i].value; g_free(str); return; } } g_free
(str); } static void uat_wep_key_records_key_tostr_cb(void* rec
, char** out_ptr, unsigned* out_len, const void* vs, const void
* u2 __attribute__((unused))) { guint i; for(i=0;((const value_string
*)vs)[i].strptr;i++) { if ( ((const value_string*)vs)[i].value
== ((uat_wep_key_record_t*)rec)->key ) { *out_ptr = g_strdup
(((const value_string*)vs)[i].strptr); *out_len = (unsigned)strlen
(*out_ptr); return; } } *out_ptr = g_strdup("wep"); *out_len =
(unsigned)strlen("wep"); }
218UAT_CSTRING_CB_DEF(uat_wep_key_records, string, uat_wep_key_record_t)static void uat_wep_key_records_string_set_cb(void* rec, const
char* buf, guint len, const void* u1 __attribute__((unused))
, const void* u2 __attribute__((unused))) { char* new_buf = g_strndup
(buf,len); g_free((((uat_wep_key_record_t*)rec)->string));
(((uat_wep_key_record_t*)rec)->string) = new_buf; } static
void uat_wep_key_records_string_tostr_cb(void* rec, char** out_ptr
, unsigned* out_len, const void* u1 __attribute__((unused)), const
void* u2 __attribute__((unused))) { if (((uat_wep_key_record_t
*)rec)->string ) { *out_ptr = g_strdup((((uat_wep_key_record_t
*)rec)->string)); *out_len = (unsigned)strlen((((uat_wep_key_record_t
*)rec)->string)); } else { *out_ptr = g_strdup(""); *out_len
= 0; } }
219
220/* Stuff for the WEP/WPA/WPA2 decoder */
221static gboolean enable_decryption = TRUE(!(0));
222
223static void
224ieee_80211_add_tagged_parameters(tvbuff_t *tvb, int offset, packet_info *pinfo,
225 proto_tree *tree, int tagged_parameters_len, int ftype);
226
227static tvbuff_t *try_decrypt(tvbuff_t *tvb, guint32 offset, guint32 len, guint8 *algorithm, guint32 *sec_header, guint32 *sec_trailer, PAIRPDCAP_KEY_ITEM used_key);
228
229static int weak_iv(guchar *iv);
230
231typedef struct mimo_control
232{
233 guint8 nc;
234 guint8 nr;
235 gboolean chan_width;
236 guint8 grouping;
237 guint8 coefficient_size;
238 guint8 codebook_info;
239 guint8 remaining_matrix_segment;
240} mimo_control_t;
241
242/* ************************************************************************* */
243/* Miscellaneous Constants */
244/* ************************************************************************* */
245#define SHORT_STR256 256
246#define IS_DMG_KEY1 1
247#define IS_CTRL_GRANT_OR_GRANT_ACK_KEY2 2
248/* ************************************************************************* */
249/* Define some very useful macros that are used to analyze frame types etc. */
250/* ************************************************************************* */
251
252/*
253 * Fetch the frame control field and swap it if needed. "fcf" and "tvb"
254 * must be valid variables.
255 */
256#define FETCH_FCF(off)((option_flags & 0x00000001) ? (((guint16) ( (guint16) ((
guint16) (tvb_get_letohs(tvb, off)) >> 8) | (guint16) (
(guint16) (tvb_get_letohs(tvb, off)) << 8)))) : tvb_get_letohs
(tvb, off))
((option_flags & IEEE80211_COMMON_OPT_BROKEN_FC0x00000001) ? \
257 GUINT16_SWAP_LE_BE(tvb_get_letohs(tvb, off))(((guint16) ( (guint16) ((guint16) (tvb_get_letohs(tvb, off))
>> 8) | (guint16) ((guint16) (tvb_get_letohs(tvb, off)
) << 8))))
: \
258 tvb_get_letohs(tvb, off))
259
260/*
261 * Extract the fragment number and sequence number from the sequence
262 * control field.
263 */
264#define SEQCTL_FRAGMENT_NUMBER(x)((x) & 0x000F) ((x) & 0x000F)
265#define SEQCTL_SEQUENCE_NUMBER(x)(((x) & 0xFFF0) >> 4) (((x) & 0xFFF0) >> 4)
266
267/*
268 * Extract subfields from the QoS control field.
269 */
270#define QOS_TID(x)((x) & 0x000F) ((x) & 0x000F)
271#define QOS_PRIORITY(x)((x) & 0x0007) ((x) & 0x0007)
272#define QOS_EOSP(x)(((x) & 0x0010) >> 4) (((x) & 0x0010) >> 4) /* end of service period */
273#define QOS_ACK_POLICY(x)(((x) & 0x0060) >> 5) (((x) & 0x0060) >> 5)
274#define QOS_AMSDU_PRESENT(x)(((x) & 0x0080) >> 6) (((x) & 0x0080) >> 6)
275#define QOS_FIELD_CONTENT(x)(((x) & 0xFF00) >> 8) (((x) & 0xFF00) >> 8)
276#define QOS_MESH_CONTROL_PRESENT(x)(((x) & 0x0100) >> 8) (((x) & 0x0100) >> 8)
277
278#define QOS_FLAG_EOSP0x0010 0x0010
279
280/*
281 * Extract subfields from the result of QOS_FIELD_CONTENT().
282 */
283#define QOS_PS_BUF_STATE_INDICATED(x)(((x) & 0x02) >> 1) (((x) & 0x02) >> 1)
284#define QOS_PS_HIGHEST_PRI_BUF_AC(x)(((x) & 0x0C) >> 2) (((x) & 0x0C) >> 2)
285#define QOS_PS_QAP_BUF_LOAD(x)(((x) & 0xF0) >> 4) (((x) & 0xF0) >> 4)
286
287/*
288 * Bits from the HT Control field.
289 * 802.11-2012 and 802.11ac-2013 8.2.4.6, 32 bits.
290 */
291#define HTC_VHT0x00000001 0x00000001
292#define HTC_MRQ0x00000004 0x00000004
293#define HTC_UNSOLICITED_MFB0x20000000 0x20000000
294
295/*
296 * Extract subfields from the HT Control field.
297 */
298#define HTC_LAC(htc)((htc) & 0xFE) ((htc) & 0xFE)
299#define HTC_LAC_MAI(htc)(((htc) >> 2) & 0xF) (((htc) >> 2) & 0xF)
300#define HTC_IS_ASELI(htc)((((htc) >> 2) & 0xF) == 0xE) (HTC_LAC_MAI(htc)(((htc) >> 2) & 0xF) == 0xE)
301#define HTC_LAC_MAI_MRQ(htc)(((((htc) >> 2) & 0xF)) & 0x1) ((HTC_LAC_MAI(htc)(((htc) >> 2) & 0xF)) & 0x1)
302#define HTC_LAC_MAI_MSI(htc)(((((htc) >> 2) & 0xF) >> 1) & 0x7) ((HTC_LAC_MAI(htc)(((htc) >> 2) & 0xF) >> 1) & 0x7)
303#define HTC_LAC_MFSI(htc)(((htc) >> 4) & 0x7) (((htc) >> 4) & 0x7)
304#define HTC_LAC_ASEL_CMD(htc)(((htc) >> 9) & 0x7) (((htc) >> 9) & 0x7)
305#define HTC_LAC_ASEL_DATA(htc)(((htc) >> 12) & 0xF) (((htc) >> 12) & 0xF)
306#define HTC_LAC_MFB(htc)(((htc) >> 9) & 0x7F) (((htc) >> 9) & 0x7F)
307#define HTC_CAL_POS(htc)(((htc) >> 16) & 0x3) (((htc) >> 16) & 0x3)
308#define HTC_CAL_SEQ(htc)(((htc) >> 18) & 0x3) (((htc) >> 18) & 0x3)
309#define HTC_CSI_STEERING(htc)(((htc) >> 22) & 0x3) (((htc) >> 22) & 0x3)
310#define HTC_NDP_ANN(htc)(((htc) >> 24) & 0x1) (((htc) >> 24) & 0x1)
311#define HTC_AC_CONSTRAINT(htc)(((htc) >> 30) & 0x1) (((htc) >> 30) & 0x1)
312#define HTC_RDG_MORE_PPDU(htc)(((htc) >> 31) & 0x1) (((htc) >> 31) & 0x1)
313
314#define HTC_MFB(htc)(((htc) >> 9) & 0x7FFF) (((htc) >> 9) & 0x7FFF)
315
316/* VHT-MCS = 15, NUM_STS = 7 */
317#define HTC_NO_FEEDBACK_PRESENT(mfb)(((mfb) & 0x7F) == 0x7F) (((mfb) & 0x7F) == 0x7F)
318
319/*
320 * Extract subfields from the key octet in WEP-encrypted frames.
321 */
322#define KEY_OCTET_WEP_KEY(x)(((x) & 0xC0) >> 6) (((x) & 0xC0) >> 6)
323
324#define KEY_EXTIV0x20 0x20
325#define EXTIV_LEN8 8
326
327/*
328 * Bits from the Mesh Flags field
329 */
330#define MESH_FLAGS_ADDRESS_EXTENSION0x3 0x3
331
332/* ************************************************************************* */
333/* Constants used to identify cooked frame types */
334/* ************************************************************************* */
335#define MGT_FRAME0x00 0x00 /* Frame type is management */
336#define CONTROL_FRAME0x01 0x01 /* Frame type is control */
337#define DATA_FRAME0x02 0x02 /* Frame type is Data */
338#define EXTENSION_FRAME0x03 0x03 /* Frame type is Extension */
339
340#define DATA_SHORT_HDR_LEN24 24
341#define DATA_LONG_HDR_LEN30 30
342#define MGT_FRAME_HDR_LEN24 24 /* Length of Management frame-headers */
343
344/* ************************************************************************* */
345/* Logical field codes (IEEE 802.11 encoding of tags) */
346/* ************************************************************************* */
347#define TAG_SSID0 0
348#define TAG_SUPP_RATES1 1
349#define TAG_FH_PARAMETER2 2
350#define TAG_DS_PARAMETER3 3
351#define TAG_CF_PARAMETER4 4
352#define TAG_TIM5 5
353#define TAG_IBSS_PARAMETER6 6
354#define TAG_COUNTRY_INFO7 7
355#define TAG_FH_HOPPING_PARAMETER8 8
356#define TAG_FH_HOPPING_TABLE9 9
357#define TAG_REQUEST10 10
358#define TAG_QBSS_LOAD11 11
359#define TAG_EDCA_PARAM_SET12 12
360#define TAG_TSPEC13 13
361#define TAG_TCLAS14 14
362#define TAG_SCHEDULE15 15
363#define TAG_CHALLENGE_TEXT16 16
364
365#define TAG_POWER_CONSTRAINT32 32
366#define TAG_POWER_CAPABILITY33 33
367#define TAG_TPC_REQUEST34 34
368#define TAG_TPC_REPORT35 35
369#define TAG_SUPPORTED_CHANNELS36 36
370#define TAG_CHANNEL_SWITCH_ANN37 37
371#define TAG_MEASURE_REQ38 38
372#define TAG_MEASURE_REP39 39
373#define TAG_QUIET40 40
374#define TAG_IBSS_DFS41 41
375#define TAG_ERP_INFO42 42
376#define TAG_TS_DELAY43 43
377#define TAG_TCLAS_PROCESS44 44
378#define TAG_HT_CAPABILITY45 45 /* IEEE Stc 802.11n/D2.0 */
379#define TAG_QOS_CAPABILITY46 46
380#define TAG_ERP_INFO_OLD47 47 /* IEEE Std 802.11g/D4.0 */
381#define TAG_RSN_IE48 48
382/* Reserved 49 */
383#define TAG_EXT_SUPP_RATES50 50
384#define TAG_AP_CHANNEL_REPORT51 51
385#define TAG_NEIGHBOR_REPORT52 52
386#define TAG_RCPI53 53
387#define TAG_MOBILITY_DOMAIN54 54 /* IEEE Std 802.11r-2008 */
388#define TAG_FAST_BSS_TRANSITION55 55 /* IEEE Std 802.11r-2008 */
389#define TAG_TIMEOUT_INTERVAL56 56 /* IEEE Std 802.11r-2008 */
390#define TAG_RIC_DATA57 57 /* IEEE Std 802.11r-2008 */
391#define TAG_DSE_REG_LOCATION58 58
392#define TAG_SUPPORTED_OPERATING_CLASSES59 59 /* IEEE Std 802.11w-2009 */
393#define TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT60 60 /* IEEE Std 802.11w-2009 */
394#define TAG_HT_INFO61 61 /* IEEE Stc 802.11n/D2.0 */
395#define TAG_SECONDARY_CHANNEL_OFFSET62 62 /* IEEE Stc 802.11n/D1.10/D2.0 */
396#define TAG_BSS_AVG_ACCESS_DELAY63 63
397#define TAG_ANTENNA64 64
398#define TAG_RSNI65 65
399#define TAG_MEASURE_PILOT_TRANS66 66
400#define TAG_BSS_AVB_ADM_CAPACITY67 67
401#define TAG_IE_68_CONFLICT68 68 /* Conflict: WAPI Vs. IEEE */
402#define TAG_WAPI_PARAM_SET68 68
403#define TAG_BSS_AC_ACCESS_DELAY68 68
404#define TAG_TIME_ADV69 69 /* IEEE Std 802.11p-2010 */
405#define TAG_RM_ENABLED_CAPABILITY70 70
406#define TAG_MULTIPLE_BSSID71 71
407#define TAG_20_40_BSS_CO_EX72 72 /* IEEE P802.11n/D6.0 */
408#define TAG_20_40_BSS_INTOL_CH_REP73 73 /* IEEE P802.11n/D6.0 */
409#define TAG_OVERLAP_BSS_SCAN_PAR74 74 /* IEEE P802.11n/D6.0 */
410#define TAG_RIC_DESCRIPTOR75 75 /* IEEE Std 802.11r-2008 */
411#define TAG_MMIE76 76 /* IEEE Std 802.11w-2009 */
412#define TAG_EVENT_REQUEST78 78
413#define TAG_EVENT_REPORT79 79
414#define TAG_DIAGNOSTIC_REQUEST80 80
415#define TAG_DIAGNOSTIC_REPORT81 81
416#define TAG_LOCATION_PARAMETERS82 82
417#define TAG_NO_BSSID_CAPABILITY83 83
418#define TAG_SSID_LIST84 84
419#define TAG_MULTIPLE_BSSID_INDEX85 85
420#define TAG_FMS_DESCRIPTOR86 86
421#define TAG_FMS_REQUEST87 87
422#define TAG_FMS_RESPONSE88 88
423#define TAG_QOS_TRAFFIC_CAPABILITY89 89
424#define TAG_BSS_MAX_IDLE_PERIOD90 90
425#define TAG_TFS_REQUEST91 91
426#define TAG_TFS_RESPONSE92 92
427#define TAG_WNM_SLEEP_MODE93 93
428#define TAG_TIM_BROADCAST_REQUEST94 94
429#define TAG_TIM_BROADCAST_RESPONSE95 95
430#define TAG_COLLOCATED_INTER_REPORT96 96
431#define TAG_CHANNEL_USAGE97 97
432#define TAG_TIME_ZONE98 98 /* IEEE Std 802.11v-2011 */
433#define TAG_DMS_REQUEST99 99
434#define TAG_DMS_RESPONSE100 100
435#define TAG_LINK_IDENTIFIER101 101 /* IEEE Std 802.11z-2010 */
436#define TAG_WAKEUP_SCHEDULE102 102 /* IEEE Std 802.11z-2010 */
437#define TAG_CHANNEL_SWITCH_TIMING104 104 /* IEEE Std 802.11z-2010 */
438#define TAG_PTI_CONTROL105 105 /* IEEE Std 802.11z-2010 */
439#define TAG_PU_BUFFER_STATUS106 106 /* IEEE Std 802.11z-2010 */
440#define TAG_INTERWORKING107 107 /* IEEE Std 802.11u-2011 */
441#define TAG_ADVERTISEMENT_PROTOCOL108 108 /* IEEE Std 802.11u-2011 */
442#define TAG_EXPIDITED_BANDWIDTH_REQ109 109 /* IEEE Std 802.11u-2011 */
443#define TAG_QOS_MAP_SET110 110 /* IEEE Std 802.11u-2011 */
444#define TAG_ROAMING_CONSORTIUM111 111 /* IEEE Std 802.11u-2011 */
445#define TAG_EMERGENCY_ALERT_ID112 112 /* IEEE Std 802.11u-2011 */
446#define TAG_MESH_CONFIGURATION113 113 /* IEEE Std 802.11s-2011 */
447#define TAG_MESH_ID114 114 /* IEEE Std 802.11s-2011 */
448#define TAG_MESH_LINK_METRIC_REPORT115 115
449#define TAG_CONGESTION_NOTIFICATION116 116
450#define TAG_MESH_PEERING_MGMT117 117 /* IEEE Std 802.11s-2011 */
451#define TAG_MESH_CHANNEL_SWITCH118 118
452#define TAG_MESH_AWAKE_WINDOW119 119
453#define TAG_BEACON_TIMING120 120
454#define TAG_MCCAOP_SETUP_REQUEST121 121
455#define TAG_MCCAOP_SETUP_REPLY122 122
456#define TAG_MCCAOP_ADVERTISEMENT123 123
457#define TAG_MCCAOP_TEARDOWN124 124
458#define TAG_GANN125 125
459#define TAG_RANN126 126 /* IEEE Std 802.11s-2011 */
460#define TAG_EXTENDED_CAPABILITIES127 127 /* IEEE Stc 802.11n/D1.10/D2.0 */
461#define TAG_AGERE_PROPRIETARY128 128
462#define TAG_MESH_PREQ130 130 /* IEEE Std 802.11s-2011 */
463#define TAG_MESH_PREP131 131 /* IEEE Std 802.11s-2011 */
464#define TAG_MESH_PERR132 132 /* IEEE Std 802.11s-2011 */
465#define TAG_CISCO_CCX1_CKIP133 133 /* Cisco Compatible eXtensions v1 */
466#define TAG_CISCO_CCX2136 136 /* Cisco Compatible eXtensions v2 */
467#define TAG_PXU137 137
468#define TAG_PXUC138 138
469#define TAG_AUTH_MESH_PEERING_EXCH139 139
470#define TAG_MIC140 140
471#define TAG_DESTINATION_URI141 141
472#define TAG_U_APSD_COEX142 142
473#define TAG_WAKEUP_SCHEDULE_AD143 143 /* IEEE Std 802.11ad */
474#define TAG_EXTENDED_SCHEDULE144 144 /* IEEE Std 802.11ad */
475#define TAG_STA_AVAILABILITY145 145 /* IEEE Std 802.11ad */
476#define TAG_DMG_TSPEC146 146 /* IEEE Std 802.11ad */
477#define TAG_NEXT_DMG_ATI147 147 /* IEEE Std 802.11ad */
478#define TAG_DMG_CAPABILITIES148 148 /* IEEE Std 802.11ad */
479#define TAG_CISCO_CCX3149 149 /* Cisco Compatible eXtensions v3 */
480#define TAG_CISCO_VENDOR_SPECIFIC150 150 /* Cisco Compatible eXtensions */
481#define TAG_DMG_OPERATION151 151 /* IEEE Std 802.11ad */
482#define TAG_DMG_BSS_PRAMTER_CHANGE152 152 /* IEEE Std 802.11ad */
483#define TAG_DMG_BEAM_REFINEMENT153 153 /* IEEE Std 802.11ad */
484#define TAG_CHANNEL_MEASURMENT_FB154 154 /* IEEE Std 802.11ad */
485#define TAG_AWAKE_WINDOW157 157 /* IEEE Std 802.11ad */
486#define TAG_MULTI_BAND158 158 /* IEEE Std 802.11ad */
487#define TAG_ADDBA_EXT159 159 /* IEEE Std 802.11ad */
488#define TAG_NEXTPCP_LIST160 160 /* IEEE Std 802.11ad */
489#define TAG_PCP_HANDOVER161 161 /* IEEE Std 802.11ad */
490#define TAG_DMG_LINK_MARGIN162 162 /* IEEE Std 802.11ad */
491#define TAG_SWITCHING_STREAM163 163 /* IEEE Std 802.11ad */
492#define TAG_SESSION_TRANSMISSION164 164 /* IEEE Std 802.11ad */
493#define TAG_DYN_TONE_PAIR_REP165 165 /* IEEE Std 802.11ad */
494#define TAG_CLUSTER_REP166 166 /* IEEE Std 802.11ad */
495#define TAG_RELAY_CAPABILITIES167 167 /* IEEE Std 802.11ad */
496#define TAG_RELAY_TRANSFER_PARAM168 168 /* IEEE Std 802.11ad */
497#define TAG_BEAMLINK_MAINTAINCE169 169 /* IEEE Std 802.11ad */
498#define TAG_MULTIPLE_MAC_SUBLAYERS170 170 /* IEEE Std 802.11ad */
499#define TAG_U_PID171 171 /* IEEE Std 802.11ad */
500#define TAG_DMG_LINK_ADAPTION_ACK172 172 /* IEEE Std 802.11ad */
501#define TAG_SYMBOL_PROPRIETARY173 173
502#define TAG_MCCAOP_ADVERTISEMENT_OV174 174
503#define TAG_QUIET_PERIOD_REQ175 175 /* IEEE Std 802.11ad */
504#define TAG_QUIET_PERIOD_RES177 177 /* IEEE Std 802.11ad */
505#define TAG_ECPAC_POLICY182 182 /* IEEE Std 802.11ad */
506#define TAG_CLUSTER_TIME_OFFSET183 183 /* IEEE Std 802.11ad */
507#define TAG_ANTENNA_SECTOR_ID190 190 /* IEEE Std 802.11ad */
508#define TAG_VHT_CAPABILITY191 191 /* IEEE Std 802.11ac/D3.1 */
509#define TAG_VHT_OPERATION192 192 /* IEEE Std 802.11ac/D3.1 */
510#define TAG_EXT_BSS_LOAD193 193 /* IEEE Std 802.11ac */
511#define TAG_WIDE_BW_CHANNEL_SWITCH194 194 /* IEEE Std 802.11ac */
512#define TAG_VHT_TX_PWR_ENVELOPE195 195 /* IEEE Std 802.11ac/D5.0 */
513#define TAG_CHANNEL_SWITCH_WRAPPER196 196 /* IEEE Std 802.11ac */
514#define TAG_OPERATING_MODE_NOTIFICATION199 199 /* IEEE Std 802.11ac */
515#define TAG_VENDOR_SPECIFIC_IE221 221
516
517static const value_string tag_num_vals[] = {
518 { TAG_SSID0, "SSID parameter set" },
519 { TAG_SUPP_RATES1, "Supported Rates" },
520 { TAG_FH_PARAMETER2, "FH Parameter set" },
521 { TAG_DS_PARAMETER3, "DS Parameter set" },
522 { TAG_CF_PARAMETER4, "CF Parameter set" },
523 { TAG_TIM5, "Traffic Indication Map (TIM)" },
524 { TAG_IBSS_PARAMETER6, "IBSS Parameter set" },
525 { TAG_COUNTRY_INFO7, "Country Information" },
526 { TAG_FH_HOPPING_PARAMETER8, "Hopping Pattern Parameters" },
527 { TAG_FH_HOPPING_TABLE9, "Hopping Pattern Table" },
528 { TAG_REQUEST10, "Request" },
529 { TAG_QBSS_LOAD11, "QBSS Load Element" },
530 { TAG_EDCA_PARAM_SET12, "EDCA Parameter Set" },
531 { TAG_TSPEC13, "Traffic Specification" },
532 { TAG_TCLAS14, "Traffic Classification" },
533 { TAG_SCHEDULE15, "Schedule" },
534 { TAG_CHALLENGE_TEXT16, "Challenge text" },
535 { TAG_POWER_CONSTRAINT32, "Power Constraint" },
536 { TAG_POWER_CAPABILITY33, "Power Capability" },
537 { TAG_TPC_REQUEST34, "TPC Request" },
538 { TAG_TPC_REPORT35, "TPC Report" },
539 { TAG_SUPPORTED_CHANNELS36, "Supported Channels" },
540 { TAG_CHANNEL_SWITCH_ANN37, "Channel Switch Announcement" },
541 { TAG_MEASURE_REQ38, "Measurement Request" },
542 { TAG_MEASURE_REP39, "Measurement Report" },
543 { TAG_QUIET40, "Quiet" },
544 { TAG_IBSS_DFS41, "IBSS DFS" },
545 { TAG_ERP_INFO42, "ERP Information" },
546 { TAG_TS_DELAY43, "TS Delay" },
547 { TAG_TCLAS_PROCESS44, "TCLAS Processing" },
548 { TAG_HT_CAPABILITY45, "HT Capabilities (802.11n D1.10)" },
549 { TAG_QOS_CAPABILITY46, "QoS Capability" },
550 { TAG_ERP_INFO_OLD47, "ERP Information" }, /* Reserved... */
551 { TAG_RSN_IE48, "RSN Information" },
552 { TAG_EXT_SUPP_RATES50, "Extended Supported Rates" },
553 { TAG_AP_CHANNEL_REPORT51, "AP Channel Report" },
554 { TAG_NEIGHBOR_REPORT52, "Neighbor Report" },
555 { TAG_RCPI53, "RCPI" },
556 { TAG_MOBILITY_DOMAIN54, "Mobility Domain" },
557 { TAG_FAST_BSS_TRANSITION55, "Fast BSS Transition" },
558 { TAG_TIMEOUT_INTERVAL56, "Timeout Interval" },
559 { TAG_RIC_DATA57, "RIC Data" },
560 { TAG_DSE_REG_LOCATION58, "DSE Registered Location" },
561 { TAG_SUPPORTED_OPERATING_CLASSES59, "Supported Operating Classes" },
562 { TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT60, "Extended Channel Switch Announcement" },
563 { TAG_HT_INFO61, "HT Information (802.11n D1.10)" },
564 { TAG_SECONDARY_CHANNEL_OFFSET62, "Secondary Channel Offset (802.11n D1.10)" },
565 { TAG_BSS_AVG_ACCESS_DELAY63, "BSS Average Access Delay" },
566 { TAG_ANTENNA64, "Antenna" },
567 { TAG_RSNI65, "RSNI" },
568 { TAG_MEASURE_PILOT_TRANS66, "Measurement Pilot Transmission" },
569 { TAG_BSS_AVB_ADM_CAPACITY67, "BSS Available Admission Capacity" },
570 { TAG_IE_68_CONFLICT68, "BSS AC Access Delay/WAPI Parameter Set" },
571 { TAG_TIME_ADV69, "Time Advertisement" },
572 { TAG_RM_ENABLED_CAPABILITY70, "RM Enabled Capabilities" },
573 { TAG_MULTIPLE_BSSID71, "Multiple BSSID" },
574 { TAG_20_40_BSS_CO_EX72, "20/40 BSS Coexistence" },
575 { TAG_20_40_BSS_INTOL_CH_REP73, "20/40 BSS Intolerant Channel Report" }, /* IEEE P802.11n/D6.0 */
576 { TAG_OVERLAP_BSS_SCAN_PAR74, "Overlapping BSS Scan Parameters" }, /* IEEE P802.11n/D6.0 */
577 { TAG_RIC_DESCRIPTOR75, "RIC Descriptor" },
578 { TAG_MMIE76, "Management MIC" },
579 { TAG_EVENT_REQUEST78, "Event Request" },
580 { TAG_EVENT_REPORT79, "Event Report" },
581 { TAG_DIAGNOSTIC_REQUEST80, "Diagnostic Request" },
582 { TAG_DIAGNOSTIC_REPORT81, "Diagnostic Report" },
583 { TAG_LOCATION_PARAMETERS82, "Location Parameters" },
584 { TAG_NO_BSSID_CAPABILITY83, "Non Transmitted BSSID Capability" },
585 { TAG_SSID_LIST84, "SSID List" },
586 { TAG_MULTIPLE_BSSID_INDEX85, "Multiple BSSID Index" },
587 { TAG_FMS_DESCRIPTOR86, "FMS Descriptor" },
588 { TAG_FMS_REQUEST87, "FMS Request" },
589 { TAG_FMS_RESPONSE88, "FMS Response" },
590 { TAG_QOS_TRAFFIC_CAPABILITY89, "QoS Traffic Capability" },
591 { TAG_BSS_MAX_IDLE_PERIOD90, "BSS Max Idle Period" },
592 { TAG_TFS_REQUEST91, "TFS Request" },
593 { TAG_TFS_RESPONSE92, "TFS Response" },
594 { TAG_WNM_SLEEP_MODE93, "WNM-Sleep Mode" },
595 { TAG_TIM_BROADCAST_REQUEST94, "TIM Broadcast Request" },
596 { TAG_TIM_BROADCAST_RESPONSE95, "TIM Broadcast Response" },
597 { TAG_COLLOCATED_INTER_REPORT96, "Collocated Interference Report" },
598 { TAG_CHANNEL_USAGE97, "Channel Usage" },
599 { TAG_TIME_ZONE98, "Time Zone" },
600 { TAG_DMS_REQUEST99, "DMS Request" },
601 { TAG_DMS_RESPONSE100, "DMS Response" },
602 { TAG_LINK_IDENTIFIER101, "Link Identifier" },
603 { TAG_WAKEUP_SCHEDULE102, "Wakeup Schedule" },
604 { TAG_CHANNEL_SWITCH_TIMING104, "Channel Switch Timing" },
605 { TAG_PTI_CONTROL105, "PTI Control" },
606 { TAG_PU_BUFFER_STATUS106, "PU Buffer Status" },
607 { TAG_INTERWORKING107, "Interworking" },
608 { TAG_ADVERTISEMENT_PROTOCOL108, "Advertisement Protocol"},
609 { TAG_EXPIDITED_BANDWIDTH_REQ109, "Expedited Bandwidth Request" },
610 { TAG_QOS_MAP_SET110, "QoS Map Set" },
611 { TAG_ROAMING_CONSORTIUM111, "Roaming Consortium" },
612 { TAG_EMERGENCY_ALERT_ID112, "Emergency Alert Identifier" },
613 { TAG_MESH_CONFIGURATION113, "Mesh Configuration" },
614 { TAG_MESH_ID114, "Mesh ID" },
615 { TAG_MESH_LINK_METRIC_REPORT115, "Mesh Link Metric Report" },
616 { TAG_CONGESTION_NOTIFICATION116, "Congestion Notification" },
617 { TAG_MESH_PEERING_MGMT117, "Mesh Peering Management" },
618 { TAG_MESH_CHANNEL_SWITCH118, "Mesh Channel Switch Parameters" },
619 { TAG_MESH_AWAKE_WINDOW119, "Mesh Awake Windows" },
620 { TAG_BEACON_TIMING120, "Beacon Timing" },
621 { TAG_MCCAOP_SETUP_REQUEST121, "MCCAOP Setup Request" },
622 { TAG_MCCAOP_SETUP_REPLY122, "MCCAOP SETUP Reply" },
623 { TAG_MCCAOP_ADVERTISEMENT123, "MCCAOP Advertisement" },
624 { TAG_MCCAOP_TEARDOWN124, "MCCAOP Teardown" },
625 { TAG_GANN125, "Gate Announcement" },
626 { TAG_RANN126, "Root Announcement" },
627 { TAG_EXTENDED_CAPABILITIES127, "Extended Capabilities" },
628 { TAG_AGERE_PROPRIETARY128, "Agere Proprietary" },
629 { TAG_MESH_PREQ130, "Path Request" },
630 { TAG_MESH_PREP131, "Path Reply" },
631 { TAG_MESH_PERR132, "Path Error" },
632 { TAG_CISCO_CCX1_CKIP133, "Cisco CCX1 CKIP + Device Name" },
633 { TAG_CISCO_CCX2136, "Cisco CCX2" },
634 { TAG_PXU137, "Proxy Update" },
635 { TAG_PXUC138, "Proxy Update Confirmation"},
636 { TAG_AUTH_MESH_PEERING_EXCH139, "Auhenticated Mesh Perring Exchange" },
637 { TAG_MIC140, "MIC (Message Integrity Code)" },
638 { TAG_DESTINATION_URI141, "Destination URI" },
639 { TAG_U_APSD_COEX142, "U-APSD Coexistence" },
640 { TAG_WAKEUP_SCHEDULE_AD143, "Wakeup Schedule 802.11ad" },
641 { TAG_EXTENDED_SCHEDULE144, "Extended Schedule" },
642 { TAG_STA_AVAILABILITY145, "STA Availability" },
643 { TAG_DMG_TSPEC146, "DMG TSPEC" },
644 { TAG_NEXT_DMG_ATI147, "Next DMG ATI" },
645 { TAG_DMG_CAPABILITIES148, "DMG Capabilities" },
646 { TAG_CISCO_CCX3149, "Cisco Unknown 95" },
647 { TAG_CISCO_VENDOR_SPECIFIC150, "Vendor Specific" },
648 { TAG_DMG_OPERATION151, "DMG Operating" },
649 { TAG_DMG_BSS_PRAMTER_CHANGE152, "DMG BSS Parameter Change" },
650 { TAG_DMG_BEAM_REFINEMENT153, "DMG Beam Refinement" },
651 { TAG_CHANNEL_MEASURMENT_FB154, "Channel Measurement Feedback" },
652 { TAG_AWAKE_WINDOW157, "Awake Window" },
653 { TAG_MULTI_BAND158, "Multi Band" },
654 { TAG_ADDBA_EXT159, "ADDBA Extension" },
655 { TAG_NEXTPCP_LIST160, "NEXTPCP List" },
656 { TAG_PCP_HANDOVER161, "PCP Handover" },
657 { TAG_DMG_LINK_MARGIN162, "DMG Link Margin" },
658 { TAG_SWITCHING_STREAM163, "Switching Stream" },
659 { TAG_SESSION_TRANSMISSION164, "Session Transmission" },
660 { TAG_DYN_TONE_PAIR_REP165, "Dynamic Tone Pairing Report" },
661 { TAG_CLUSTER_REP166, "Cluster Report" },
662 { TAG_RELAY_CAPABILITIES167, "Relay Capabilities" },
663 { TAG_RELAY_TRANSFER_PARAM168, "Relay Transfer Parameter" },
664 { TAG_BEAMLINK_MAINTAINCE169, "Beamlink Maintenance" },
665 { TAG_MULTIPLE_MAC_SUBLAYERS170, "Multiple MAC Sublayers" },
666 { TAG_U_PID171, "U-PID" },
667 { TAG_DMG_LINK_ADAPTION_ACK172, "DMG Link Adaption Acknowledgment" },
668 { TAG_SYMBOL_PROPRIETARY173, "Symbol Proprietary" },
669 { TAG_MCCAOP_ADVERTISEMENT_OV174, "MCCAOP Advertisement Overview" },
670 { TAG_QUIET_PERIOD_REQ175, "Quiet Period Request" },
671 { TAG_QUIET_PERIOD_RES177, "Quiet Period Response" },
672 { TAG_ECPAC_POLICY182, "ECPAC Policy" },
673 { TAG_CLUSTER_TIME_OFFSET183, "Cluster Time Offset" },
674 { TAG_ANTENNA_SECTOR_ID190, "Antenna Sector ID" },
675 { TAG_VHT_CAPABILITY191, "VHT Capabilities (IEEE Std 802.11ac/D3.1)" },
676 { TAG_VHT_OPERATION192, "VHT Operation (IEEE Std 802.11ac/D3.1)" },
677 { TAG_EXT_BSS_LOAD193, "Extended BSS Load" },
678 { TAG_WIDE_BW_CHANNEL_SWITCH194, "Wide Bandwidth Channel Switch" },
679 { TAG_VHT_TX_PWR_ENVELOPE195, "VHT Tx Power Envelope (IEEE Std 802.11ac/D5.0)" },
680 { TAG_CHANNEL_SWITCH_WRAPPER196, "Channel Switch Wrapper" },
681 { TAG_OPERATING_MODE_NOTIFICATION199, "Operating Mode Notification" },
682 { TAG_VENDOR_SPECIFIC_IE221, "Vendor Specific" },
683 { 0, NULL((void*)0) }
684};
685static value_string_ext tag_num_vals_ext = VALUE_STRING_EXT_INIT(tag_num_vals){ _try_val_to_str_ext_init, 0, (sizeof (tag_num_vals) / sizeof
((tag_num_vals)[0]))-1, tag_num_vals, "tag_num_vals" }
;
686
687/* WFA vendor specific subtypes */
688#define WFA_SUBTYPE_P2P9 9
689#define WFA_SUBTYPE_WIFI_DISPLAY10 10
690#define WFA_SUBTYPE_HS20_INDICATION16 16
691#define WFA_SUBTYPE_HS20_ANQP17 17
692
693static const value_string wfa_subtype_vals[] = {
694 { WFA_SUBTYPE_P2P9, "P2P" },
695 { WFA_SUBTYPE_HS20_INDICATION16, "Hotspot 2.0 Indication" },
696 { WFA_SUBTYPE_HS20_ANQP17, "Hotspot 2.0 ANQP" },
697 { 0, NULL((void*)0) }
698};
699
700/* ************************************************************************* */
701/* Supported Rates (7.3.2.2) */
702/* ************************************************************************* */
703
704static const value_string ieee80211_supported_rates_vals[] = {
705 { 0x02, "1" },
706 { 0x03, "1.5" },
707 { 0x04, "2" },
708 { 0x05, "2.5" },
709 { 0x06, "3" },
710 { 0x09, "4.5" },
711 { 0x0B, "5.5" },
712 { 0x0C, "6" },
713 { 0x12, "9" },
714 { 0x16, "11" },
715 { 0x18, "12" },
716 { 0x1B, "13.5" },
717 { 0x24, "18" },
718 { 0x2C, "22" },
719 { 0x30, "24" },
720 { 0x36, "27" },
721 { 0x42, "33" },
722 { 0x48, "36" },
723 { 0x60, "48" },
724 { 0x6C, "54" },
725 { 0x82, "1(B)" },
726 { 0x83, "1.5(B)" },
727 { 0x84, "2(B)" },
728 { 0x85, "2.5(B)" },
729 { 0x86, "3(B)" },
730 { 0x89, "4.5(B)" },
731 { 0x8B, "5.5(B)" },
732 { 0x8C, "6(B)" },
733 { 0x92, "9(B)" },
734 { 0x96, "11(B)" },
735 { 0x98, "12(B)" },
736 { 0x9B, "13.5(B)" },
737 { 0xA4, "18(B)" },
738 { 0xAC, "22(B)" },
739 { 0xB0, "24(B)" },
740 { 0xB6, "27(B)" },
741 { 0xC2, "33(B)" },
742 { 0xC8, "36(B)" },
743 { 0xE0, "48(B)" },
744 { 0xEC, "54(B)" },
745 { 0xFF, "BSS requires support for mandatory features of HT PHY (IEEE 802.11 - Clause 20)" },
746 { 0, NULL((void*)0)}
747};
748value_string_ext ieee80211_supported_rates_vals_ext = VALUE_STRING_EXT_INIT(ieee80211_supported_rates_vals){ _try_val_to_str_ext_init, 0, (sizeof (ieee80211_supported_rates_vals
) / sizeof ((ieee80211_supported_rates_vals)[0]))-1, ieee80211_supported_rates_vals
, "ieee80211_supported_rates_vals" }
;
749
750/* ************************************************************************* */
751/* 8.4.1.7 Reason Code field */
752/* ************************************************************************* */
753static const value_string ieee80211_reason_code[] = {
754 { 1, "Unspecified reason" },
755 { 2, "Previous authentication no longer valid" },
756 { 3, "Deauthenticated because sending STA is leaving (or has left) IBSS or ESS" },
757 { 4, "Disassociated due to inactivity" },
758 { 5, "Disassociated because AP is unable to handle all currently associated STAs" },
759 { 6, "Class 2 frame received from nonauthenticated STA" },
760 { 7, "Class 3 frame received from nonassociated STA" },
761 { 8, "Disassociated because sending STA is leaving (or has left) BSS" },
762 { 9, "STA requesting (re)association is not authenticated with responding STA" },
763 { 10, "Disassociated because the information in the Power Capability element is unacceptable" },
764 { 11, "Disassociated because the information in the Supported Channels element is unacceptable" },
765 { 12, "Reserved" },
766 { 13, "Invalid information element, i.e., an information element defined in this standard for which the content does not meet the specifications in Clause 7" },
767 { 14, "Message integrity code (MIC) failure" },
768 { 15, "4-Way Handshake timeout" },
769 { 16, "Group Key Handshake timeout" },
770 { 17, "Information element in 4-Way Handshake different from (Re)Association Request/Probe Response/Beacon frame" },
771 { 18, "Invalid group cipher" },
772 { 19, "Invalid pairwise cipher" },
773 { 20, "Invalid AKMP" },
774 { 21, "Unsupported RSN information element version" },
775 { 22, "Invalid RSN information element capabilities" },
776 { 23, "IEEE 802.1X authentication failed" },
777 { 24, "Cipher suite rejected because of the security policy" },
778 { 25, "TDLS direct-link teardown due to TDLS peer STA unreachable via the TDLS direct link" },
779 { 26, "TDLS direct-link teardown for unspecified reason" },
780 { 27, "Disassociated because session terminated by SSP request" },
781 { 28, "Disassociated because of lack of SSP roaming agreement" },
782 { 29, "Requested service rejected because of SSP cipher suite or AKM requirement " },
783 { 30, "Requested service not authorized in this location" },
784 { 31, "TS deleted because QoS AP lacks sufficient bandwidth for this QoS STA due to a change in BSS service characteristics or operational mode" },
785 { 32, "Disassociated for unspecified, QoS-related reason" },
786 { 33, "Disassociated because QoS AP lacks sufficient bandwidth for this QoS STA" },
787 { 34, "Disassociated because excessive number of frames need to be acknowledged, but are not acknowledged due to AP transmissions and/or poor channel conditions" },
788 { 35, "Disassociated because STA is transmitting outside the limits of its TXOPs" },
789 { 36, "Requested from peer STA as the STA is leaving the BSS (or resetting)" },
790 { 37, "Requested from peer STA as it does not want to use the mechanism" },
791 { 38, "Requested from peer STA as the STA received frames using the mechanism for which a setup is required" },
792 { 39, "Requested from peer STA due to timeout" },
793 { 45, "Peer STA does not support the requested cipher suite" },
794 { 46, "Disassociated because authorized access limit reached" },
795 { 47, "Disassociated due to external service requirements" },
796 { 48, "Invalid FT Action frame count" },
797 { 49, "Invalid pairwise master key identifier (PMKI)" },
798 { 50, "Invalid MDE" },
799 { 51, "Invalid FTE" },
800 { 52, "SME cancels the mesh peering instance with the reason other than reaching the maximum number of peer mesh STAs" },
801 { 53, "The mesh STA has reached the supported maximum number of peer mesh STAs" },
802 { 54, "The received information violates the Mesh Configuration policy configured in the mesh STA profile" },
803 { 55, "The mesh STA has received a Mesh Peering Close message requesting to close the mesh peering" },
804 { 56, "The mesh STA has re-sent dot11MeshMaxRetries Mesh Peering Open messages, without receiving a Mesh Peering Confirm message" },
805 { 57, "The confirmTimer for the mesh peering instance times out" },
806 { 58, "The mesh STA fails to unwrap the GTK or the values in the wrapped contents do not match" },
807 { 59, "The mesh STA receives inconsistent information about the mesh parameters between Mesh Peering Management frames" },
808 { 60, "The mesh STA fails the authenticated mesh peering exchange because due to failure in selecting either the pairwise ciphersuite or group ciphersuite" },
809 { 61, "The mesh STA does not have proxy information for this external destination" },
810 { 62, "The mesh STA does not have forwarding information for this destination" },
811 { 63, "The mesh STA determines that the link to the next hop of an active path in its forwarding information is no longer usable" },
812 { 64, "The Deauthentication frame was sent because the MAC address of the STA already exists in the mesh BSS. See 11.3.3 (Additional mechanisms for an AP collocated with a mesh STA)" },
813 { 65, "The mesh STA performs channel switch to meet regulatory requirements" },
814 { 66, "The mesh STA performs channel switch with unspecified reason" },
815 { 0, NULL((void*)0)}
816};
817static value_string_ext ieee80211_reason_code_ext = VALUE_STRING_EXT_INIT(ieee80211_reason_code){ _try_val_to_str_ext_init, 0, (sizeof (ieee80211_reason_code
) / sizeof ((ieee80211_reason_code)[0]))-1, ieee80211_reason_code
, "ieee80211_reason_code" }
;
818
819/* ************************************************************************* */
820/* 8.4.1.9 Status Code field */
821/* ************************************************************************* */
822static const value_string ieee80211_status_code[] = {
823 { 0, "Successful" },
824 { 1, "Unspecified failure" },
825 { 2, "TDLS wakeup schedule rejected but alternative schedule provided" },
826 { 3, "TDLS wakeup schedule rejected" },
827 { 4, "Reserved" },
828 { 5, "Security disabled" },
829 { 6, "Unacceptable lifetime" },
830 { 7, "Not in same BSS" },
831 { 8, "Reserved" },
832 { 9, "Reserved" },
833 { 10, "Cannot support all requested capabilities in the Capability Information field" },
834 { 11, "Reassociation denied due to inability to confirm that association exists" },
835 { 12, "Association denied due to reason outside the scope of this standard" },
836 { 13, "Responding STA does not support the specified authentication algorithm" },
837 { 14, "Received an Authentication frame with authentication transaction sequence number out of expected sequence" },
838 { 15, "Authentication rejected because of challenge failure" },
839 { 16, "Authentication rejected due to timeout waiting for next frame in sequence" },
840 { 17, "Association denied because AP is unable to handle additional associated STAs" },
841 { 18, "Association denied due to requesting STA not supporting all of the data rates in the BSSBasicRateSet parameter" },
842 { 19, "Association denied due to requesting STA not supporting the short preamble option" },
843 { 20, "Association denied due to requesting STA not supporting the PBCC modulation option" },
844 { 21, "Association denied due to requesting STA not supporting the Channel Agility option" },
845 { 22, "Association request rejected because Spectrum Management capability is required" },
846 { 23, "Association request rejected because the information in the Power Capability element is unacceptable" },
847 { 24, "Association request rejected because the information in the Supported Channels element is unacceptable" },
848 { 25, "Association denied due to requesting STA not supporting the Short Slot Time option" },
849 { 26, "Association denied due to requesting STA not supporting the DSSS-OFDM option" },
850 { 27, "Reserved Association denied because the requesting STA does not support HT features" },
851 { 28, "R0KH unreachable" },
852 { 29, "Association denied because the requesting STA does not support the phased coexistence operation (PCO) transition time required by the AP" },
853 { 30, "Association request rejected temporarily; try again later" },
854 { 31, "Robust Management frame policy violation" },
855 { 32, "Unspecified, QoS-related failure" },
856 { 33, "Association denied because QoS AP or PCP has insufficient bandwidth to handle another QoS STA" },
857 { 34, "Association denied due to excessive frame loss rates and/or poor conditions on current operating channel" },
858 { 35, "Association (with QoS BSS) denied because the requesting STA does not support the QoS facility" },
859 { 36, "Reserved" },
860 { 37, "The request has been declined" },
861 { 38, "The request has not been successful as one or more parameters have invalid values" },
862 { 39, "The allocation or TS has not been created because the request cannot be honored; however, a suggested TSPEC/DMG TSPEC is provided so that the initiating STA may attempt to set another allocation or TS with the suggested changes to the TSPEC/DMG TSPEC" },
863 { 40, "Invalid information element, i.e., an information element defined in this standard for which the content does not meet the specifications in Clause 7" },
864 { 41, "Invalid group cipher" },
865 { 42, "Invalid pairwise cipher" },
866 { 43, "Invalid AKMP" },
867 { 44, "Unsupported RSN information element version" },
868 { 45, "Invalid RSN information element capabilities" },
869 { 46, "Cipher suite rejected because of security policy" },
870 { 47, "The TS per allocation has not been created; however, the PCP/HC may be capable of creating a TS or allocation, in response to a request, after the time indicated in the TS Delay element" },
871 { 48, "Direct link is not allowed in the BSS by policy" },
872 { 49, "The Destination STA is not present within this BSS" },
873 { 50, "The Destination STA is not a QoS STA" },
874 { 51, "Association denied because the ListenInterval is too large" },
875 { 52, "Invalid FT Action frame count" },
876 { 53, "Invalid pairwise master key identifier (PMKID)" },
877 { 54, "Invalid MDIE" },
878 { 55, "Invalid FTIE" },
879 { 56, "Requested TCLAS processing is not supported by the PCP/AP" },
880 { 57, "The PCP/AP has insufficient TCLAS processing resources to satisfy the request" },
881 { 58, "The TS has not been created because the request cannot be honored; however, the PCP/HC suggests the STA to transition to other BSSs to setup the TS" },
882 { 59, "GAS Advertisement Protocol not supported" },
883 { 60, "No outstanding GAS request" },
884 { 61, "GAS Response not received from the Advertisement Server" },
885 { 62, "STA timed out waiting for GAS Query Response" },
886 { 63, "GAS Response is larger than query response length limit" },
887 { 64, "Request refused because home network does not support request" },
888 { 65, "Advertisement Server in the network is not currently reachable" },
889 { 66, "Reserved" },
890 { 67, "Request refused due to permissions received via SSPN interface" },
891 { 68, "Request refused because PCP/AP does not support unauthenticated access" },
892 { 69, "Reserved" },
893 { 70, "Reserved" },
894 { 71, "Reserved" },
895 { 72, "Invalid contents of RSNIE" },
896 { 73, "U-APSD Coexistence is not supported" },
897 { 74, "Requested U-APSD Coexistence mode is not supported" },
898 { 75, "Requested Interval/Duration value cannot be supported with U-APSD Coexistence" },
899 { 76, "Authentication is rejected because an Anti-Clogging Token is required" },
900 { 77, "Authentication is rejected because the offered finite cyclic group is not supported" },
901 { 78, "The TBTT adjustment request has not been successful because the STA could not find an alternative TBTT" },
902 { 79, "Transmission failure" },
903 { 80, "Requested TCLAS Not Supported" },
904 { 81, "TCLAS Resources Exhausted" },
905 { 82, "Rejected with Suggested BSS Transition" },
906 { 83, "Reject with recommended schedule" },
907 { 84, "Reject because no wakeup schedule specified" },
908 { 85, "Success, the destination STA is in power save mode" },
909 { 86, "FST pending, in process of admitting FST session" },
910 { 87, "performing FST now" },
911 { 88, "FST pending, gap(s) in Block Ack window" },
912 { 89, "Reject because of U-PID setting" },
913 { 92, "(Re)association refused for some external reason" },
914 { 93, "(Re)association refused because of memory limits at the AP" },
915 { 94, "(Re)association refused because emergency services are not supported at the AP" },
916 { 95, "GAS query response not yet received" },
917 { 96, "Reject since the request is for transition to a frequency band subject to DSE procedures and FST initiator is a dependent STA" },
918 { 97, "Reserved" },
919 { 98, "Reserved" },
920 { 99, "The association has been denied; however, one or more Multi-band elements are included that can be used by the receiving STA to join the BSS" },
921 { 100, "The request failed due to a reservation conflict" },
922 { 101, "The request failed due to exceeded MAF limit" },
923 { 102, "The request failed due to exceeded MCCA track limit" },
924 { 103, "Association denied because the information in the Spectrum Management field is unacceptable" },
925 { 0, NULL((void*)0)}
926};
927static value_string_ext ieee80211_status_code_ext = VALUE_STRING_EXT_INIT(ieee80211_status_code){ _try_val_to_str_ext_init, 0, (sizeof (ieee80211_status_code
) / sizeof ((ieee80211_status_code)[0]))-1, ieee80211_status_code
, "ieee80211_status_code" }
;
928
929/* ************************************************************************* */
930/* Frame types, and their names */
931/* ************************************************************************* */
932static const value_string frame_type_subtype_vals[] = {
933 {MGT_ASSOC_REQ0x00, "Association Request"},
934 {MGT_ASSOC_RESP0x01, "Association Response"},
935 {MGT_REASSOC_REQ0x02, "Reassociation Request"},
936 {MGT_REASSOC_RESP0x03, "Reassociation Response"},
937 {MGT_PROBE_REQ0x04, "Probe Request"},
938 {MGT_PROBE_RESP0x05, "Probe Response"},
939 {MGT_MEASUREMENT_PILOT0x06, "Measurement Pilot"},
940 {MGT_BEACON0x08, "Beacon frame"},
941 {MGT_ATIM0x09, "ATIM"},
942 {MGT_DISASS0x0A, "Disassociate"},
943 {MGT_AUTHENTICATION0x0B, "Authentication"},
944 {MGT_DEAUTHENTICATION0x0C, "Deauthentication"},
945 {MGT_ACTION0x0D, "Action"},
946 {MGT_ACTION_NO_ACK0x0E, "Action No Ack"},
947 {MGT_ARUBA_WLAN0x0F, "Aruba Management"},
948
949 {CTRL_BEAMFORM_RPT_POLL0x14, "Beamforming Report Poll"},
950 {CTRL_VHT_NDP_ANNC0x15, "VHT NDP Announcement"},
951 {CTRL_CONTROL_WRAPPER0x17, "Control Wrapper"},
952 {CTRL_BLOCK_ACK_REQ0x18, "802.11 Block Ack Req"},
953 {CTRL_BLOCK_ACK0x19, "802.11 Block Ack"},
954 {CTRL_PS_POLL0x1A, "Power-Save poll"},
955 {CTRL_RTS0x1B, "Request-to-send"},
956 {CTRL_CTS0x1C, "Clear-to-send"},
957 {CTRL_ACKNOWLEDGEMENT0x1D, "Acknowledgement"},
958 {CTRL_CFP_END0x1E, "CF-End (Control-frame)"},
959 {CTRL_CFP_ENDACK0x1F, "CF-End + CF-Ack (Control-frame)"},
960
961 {DATA0x20, "Data"},
962 {DATA_CF_ACK0x21, "Data + CF-Ack"},
963 {DATA_CF_POLL0x22, "Data + CF-Poll"},
964 {DATA_CF_ACK_POLL0x23, "Data + CF-Ack + CF-Poll"},
965 {DATA_NULL_FUNCTION0x24, "Null function (No data)"},
966 {DATA_CF_ACK_NOD0x25, "Acknowledgement (No data)"},
967 {DATA_CF_POLL_NOD0x26, "CF-Poll (No data)"},
968 {DATA_CF_ACK_POLL_NOD0x27, "CF-Ack/Poll (No data)"},
969 {DATA_QOS_DATA0x28, "QoS Data"},
970 {DATA_QOS_DATA_CF_ACK0x29, "QoS Data + CF-Acknowledgment"},
971 {DATA_QOS_DATA_CF_POLL0x2A, "QoS Data + CF-Poll"},
972 {DATA_QOS_DATA_CF_ACK_POLL0x2B, "QoS Data + CF-Ack + CF-Poll"},
973 {DATA_QOS_NULL0x2C, "QoS Null function (No data)"},
974 {DATA_QOS_CF_POLL_NOD0x2E, "QoS CF-Poll (No Data)"},
975 {DATA_QOS_CF_ACK_POLL_NOD0x2F, "QoS CF-Ack + CF-Poll (No data)"},
976
977 {EXTENSION_DMG_BEACON0x30, "DMG Beacon"},
978
979 {CTRL_POLL0x162, "Poll"},
980 {CTRL_SPR0x163, "Service Period Request"},
981 {CTRL_GRANT0x164, "Grant"},
982 {CTRL_DMG_CTS0x165, "DMG Clear-to-send"},
983 {CTRL_DMG_DTS0x166, "DMG Denial-to-send"},
984 {CTRL_GRANT_ACK0x167, "Grant Acknowledgment"},
985 {CTRL_SSW0x168, "Sector Sweep"},
986 {CTRL_SSW_FEEDBACK0x169, "Sector Sweep Feedback"},
987 {CTRL_SSW_ACK0x16A, "Sector Sweep Acknoledgment"},
988
989 {0, NULL((void*)0)}
990};
991static value_string_ext frame_type_subtype_vals_ext = VALUE_STRING_EXT_INIT(frame_type_subtype_vals){ _try_val_to_str_ext_init, 0, (sizeof (frame_type_subtype_vals
) / sizeof ((frame_type_subtype_vals)[0]))-1, frame_type_subtype_vals
, "frame_type_subtype_vals" }
;
992
993/* ************************************************************************* */
994/* 802.1D Tag Name (by WME Access Category Names) */
995/* ************************************************************************* */
996static const value_string ieee80211_qos_tags_acs[] = {
997 { 0, "Best Effort (Best Effort)" },
998 { 1, "Background (Background)" },
999 { 2, "Spare (Background)" },
1000 { 3, "Excellent Effort (Best Effort)" },
1001 { 4, "Controlled Load (Video)" },
1002 { 5, "Video (Video)" },
1003 { 6, "Voice (Voice)" },
1004 { 7, "Network Control (Voice)" },
1005 { 0, NULL((void*)0) }
1006};
1007
1008/* ************************************************************************* */
1009/* WME Access Category Names (by WME ACI) */
1010/* ************************************************************************* */
1011static const value_string wme_acs[] = {
1012 { 0, "Best Effort" },
1013 { 1, "Background" },
1014 { 2, "Video" },
1015 { 3, "Voice" },
1016 { 0, NULL((void*)0) }
1017};
1018
1019/* ************************************************************************* */
1020/* Aruba Management Type */
1021/* ************************************************************************* */
1022static const value_string aruba_mgt_typevals[] = {
1023 { 0x0001, "Hello" },
1024 { 0x0002, "Probe" },
1025 { 0x0003, "MTU" },
1026 { 0x0004, "Ageout" },
1027 { 0x0005, "Heartbeat" },
1028 { 0x0006, "Deauth" },
1029 { 0x0007, "Disassoc" },
1030 { 0x0008, "Probe response" },
1031 { 0x0009, "Tunnel update" },
1032 { 0x000A, "Laser beam active" },
1033 { 0x000B, "Client IP" },
1034 { 0x000C, "Laser beam active v2" },
1035 { 0x000D, "AP statistics" },
1036 { 0, NULL((void*)0) }
1037};
1038static value_string_ext aruba_mgt_typevals_ext = VALUE_STRING_EXT_INIT(aruba_mgt_typevals){ _try_val_to_str_ext_init, 0, (sizeof (aruba_mgt_typevals) /
sizeof ((aruba_mgt_typevals)[0]))-1, aruba_mgt_typevals, "aruba_mgt_typevals"
}
;
1039
1040/*** Begin: Action Fixed Parameter ***/
1041#define CAT_SPECTRUM_MGMT0 0
1042#define CAT_QOS1 1
1043#define CAT_DLS2 2
1044#define CAT_BLOCK_ACK3 3
1045#define CAT_PUBLIC4 4
1046#define CAT_RADIO_MEASUREMENT5 5
1047#define CAT_FAST_BSS_TRANSITION6 6
1048#define CAT_HT7 7
1049#define CAT_SA_QUERY8 8
1050#define CAT_PUBLIC_PROTECTED9 9
1051#define CAT_WNM10 10
1052#define CAT_UNPROTECTED_WNM11 11
1053#define CAT_TDLS12 12
1054#define CAT_MESH13 13
1055#define CAT_MULTIHOP14 14
1056#define CAT_SELF_PROTECTED15 15
1057#define CAT_DMG16 16
1058#define CAT_MGMT_NOTIFICATION17 17
1059#define CAT_FAST_SESSION_TRANSFER18 18
1060#define CAT_ROBUST_AV_STREAMING19 19
1061#define CAT_UNPROTECTED_DMG20 20
1062#define CAT_VHT21 21
1063#define CAT_VENDOR_SPECIFIC_PROTECTED126 126
1064#define CAT_VENDOR_SPECIFIC127 127
1065
1066#define CAT_MESH_LINK_METRIC31 31
1067#define CAT_MESH_PATH_SELECTION32 32
1068#define CAT_MESH_INTERWORKING33 33
1069#define CAT_MESH_RESOURCE_COORDINATION34 34
1070#define CAT_MESH_SECURITY_ARCHITECTURE35 35
1071
1072#define SM_ACTION_MEASUREMENT_REQUEST0 0
1073#define SM_ACTION_MEASUREMENT_REPORT1 1
1074#define SM_ACTION_TPC_REQUEST2 2
1075#define SM_ACTION_TPC_REPORT3 3
1076#define SM_ACTION_CHAN_SWITCH_ANNC4 4
1077#define SM_ACTION_EXT_CHAN_SWITCH_ANNC5 5
1078
1079#define QOS_ACTION_ADDTS_REQUEST0 0
1080#define QOS_ACTION_ADDTS_RESPONSE1 1
1081#define QOS_ACTION_DELTS2 2
1082#define QOS_ACTION_SCHEDULE3 3
1083#define QOS_ACTION_MAP_CONFIGURE4 4
1084
1085#define DLS_ACTION_REQUEST0 0
1086#define DLS_ACTION_RESPONSE1 1
1087#define DLS_ACTION_TEARDOWN2 2
1088
1089#define BA_ADD_BLOCK_ACK_REQUEST0 0
1090#define BA_ADD_BLOCK_ACK_RESPONSE1 1
1091#define BA_DELETE_BLOCK_ACK2 2
1092
1093/* Keep in sync with PPA_* defines */
1094#define PA_20_40_BSS_COEXISTENCE_MANAGEMENT0 0
1095#define PA_DSE_ENABLEMENT1 1
1096#define PA_DSE_DEENABLEMENT2 2
1097#define PA_DSE_REG_LOC_ANNOUNCEMENT3 3
1098#define PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4 4
1099#define PA_DSE_MEASUREMENT_REQUEST5 5
1100#define PA_DSE_MEASUREMENT_REPORT6 6
1101#define PA_MEASUREMENT_PILOT7 7
1102#define PA_DSE_POWER_CONSTRAINT8 8
1103#define PA_VENDOR_SPECIFIC9 9
1104#define PA_GAS_INITIAL_REQUEST10 10
1105#define PA_GAS_INITIAL_RESPONSE11 11
1106#define PA_GAS_COMEBACK_REQUEST12 12
1107#define PA_GAS_COMEBACK_RESPONSE13 13
1108#define PA_TDLS_DISCOVERY_RESPONSE14 14
1109#define PA_LOCATION_TRACK_NOTIFICATION15 15
1110#define PA_QAB_REQUEST16 16
1111#define PA_QAB_RESPONSE17 17
1112
1113/* Keep in sync with PA_* defines */
1114#define PPA_DSE_ENABLEMENT1 1
1115#define PPA_DSE_DEENABLEMENT2 2
1116#define PPA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4 4
1117#define PPA_DSE_MEASUREMENT_REQUEST5 5
1118#define PPA_DSE_MEASUREMENT_REPORT6 6
1119#define PPA_DSE_POWER_CONSTRAINT8 8
1120#define PPA_VENDOR_SPECIFIC9 9
1121#define PPA_GAS_INITIAL_REQUEST10 10
1122#define PPA_GAS_INITIAL_RESPONSE11 11
1123#define PPA_GAS_COMEBACK_REQUEST12 12
1124#define PPA_GAS_COMEBACK_RESPONSE13 13
1125#define PPA_QAB_REQUEST16 16
1126#define PPA_QAB_RESPONSE17 17
1127
1128#define HT_ACTION_NOTIFY_CHAN_WIDTH0 0
1129#define HT_ACTION_SM_PWR_SAVE1 1
1130#define HT_ACTION_PSMP_ACTION2 2
1131#define HT_ACTION_SET_PCO_PHASE3 3
1132#define HT_ACTION_MIMO_CSI4 4
1133#define HT_ACTION_MIMO_BEAMFORMING5 5
1134#define HT_ACTION_MIMO_COMPRESSED_BEAMFORMING6 6
1135#define HT_ACTION_ANT_SEL_FEEDBACK7 7
1136#define HT_ACTION_HT_INFO_EXCHANGE8 8
1137
1138#define DMG_ACTION_PWR_SAVE_CONFIG_REQ0 0
1139#define DMG_ACTION_PWR_SAVE_CONFIG_RES1 1
1140#define DMG_ACTION_INFO_REQ2 2
1141#define DMG_ACTION_INFO_RES3 3
1142#define DMG_ACTION_HANDOVER_REQ4 4
1143#define DMG_ACTION_HANDOVER_RES5 5
1144#define DMG_ACTION_DTP_REQ6 6
1145#define DMG_ACTION_DTP_RES7 7
1146#define DMG_ACTION_RELAY_SEARCH_REQ8 8
1147#define DMG_ACTION_RELAY_SEARCH_RES9 9
1148#define DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ10 10
1149#define DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES11 11
1150#define DMG_ACTION_RLS_REQ12 12
1151#define DMG_ACTION_RLS_RES13 13
1152#define DMG_ACTION_RLS_ANNOUNCE14 14
1153#define DMG_ACTION_RLS_TEARDOWN15 15
1154#define DMG_ACTION_RELAY_ACK_REQ16 16
1155#define DMG_ACTION_RELAY_ACK_RES17 17
1156#define DMG_ACTION_TPA_REQ18 18
1157#define DMG_ACTION_TPA_RES19 19
1158#define DMG_ACTION_TPA_REP20 20
1159#define DMG_ACTION_ROC_REQ21 21
1160#define DMG_ACTION_ROC_RES22 22
1161
1162#define UNPROTECTED_DMG_ANNOUNCE0 0
1163#define UNPROTECTED_DMG_BRP1 1
1164
1165#define FST_SETUP_REQUEST0 0
1166#define FST_SETUP_RESPONSE1 1
1167#define FST_TEAR_DOWN2 2
1168#define FST_ACK_REQUEST3 3
1169#define FST_ACK_RESPONSE4 4
1170#define FST_ON_CHANNEL_TUNNEL_REQUEST5 5
1171
1172/* IEEE Std 802.11r-2008, 7.4.8, Table 7-57g */
1173#define FT_ACTION_REQUEST1 1
1174#define FT_ACTION_RESPONSE2 2
1175#define FT_ACTION_CONFIRM3 3
1176#define FT_ACTION_ACK4 4
1177
1178/* SA Query Action frame codes (IEEE 802.11w-2009, 7.4.9) */
1179#define SA_QUERY_REQUEST0 0
1180#define SA_QUERY_RESPONSE1 1
1181
1182/* IEEE Std 802.11z-2010, 7.4.11, Table 7-57v1 */
1183#define TDLS_SETUP_REQUEST0 0
1184#define TDLS_SETUP_RESPONSE1 1
1185#define TDLS_SETUP_CONFIRM2 2
1186#define TDLS_TEARDOWN3 3
1187#define TDLS_PEER_TRAFFIC_INDICATION4 4
1188#define TDLS_CHANNEL_SWITCH_REQUEST5 5
1189#define TDLS_CHANNEL_SWITCH_RESPONSE6 6
1190#define TDLS_PEER_PSM_REQUEST7 7
1191#define TDLS_PEER_PSM_RESPONSE8 8
1192#define TDLS_PEER_TRAFFIC_RESPONSE9 9
1193#define TDLS_DISCOVERY_REQUEST10 10
1194
1195/* IEEE Std 802.11-2012, 8.5.7.1, Table 8-206 */
1196#define RM_ACTION_RADIO_MEASUREMENT_REQUEST0 0
1197#define RM_ACTION_RADIO_MEASUREMENT_REPORT1 1
1198#define RM_ACTION_LINK_MEASUREMENT_REQUEST2 2
1199#define RM_ACTION_LINK_MEASUREMENT_REPORT3 3
1200#define RM_ACTION_NEIGHBOR_REPORT_REQUEST4 4
1201#define RM_ACTION_NEIGHBOR_REPORT_RESPONSE5 5
1202
1203/* 11s draft 12.0, table 7-57v30 */
1204#define MESH_ACTION_LINK_METRIC_REPORT0 0
1205#define MESH_ACTION_HWMP1 1
1206#define MESH_ACTION_GATE_ANNOUNCE2 2
1207#define MESH_ACTION_CONGESTION_CTL3 3
1208#define MESH_ACTION_MCCA_SETUP_REQUEST4 4
1209#define MESH_ACTION_MCCA_SETUP_REPLY5 5
1210#define MESH_ACTION_MCCA_ADV_REQUEST6 6
1211#define MESH_ACTION_MCCA_ADV7 7
1212#define MESH_ACTION_MCCA_TEARDOWN8 8
1213#define MESH_ACTION_TBTT_ADJ_REQUEST9 9
1214#define MESH_ACTION_TBTT_ADJ_RESPONSE10 10
1215
1216/* 11s draft 12.0, table 7-57v42: Multihop Action field values */
1217#define MULTIHOP_ACTION_PROXY_UPDATE0 0
1218#define MULTIHOP_ACTION_PROXY_UPDATE_CONF1 1
1219
1220/* 11s draft 12.0, table 7-57v24: Self-protected Action field values */
1221#define SELFPROT_ACTION_MESH_PEERING_OPEN1 1
1222#define SELFPROT_ACTION_MESH_PEERING_CONFIRM2 2
1223#define SELFPROT_ACTION_MESH_PEERING_CLOSE3 3
1224#define SELFPROT_ACTION_MESH_GROUP_KEY_INFORM4 4
1225#define SELFPROT_ACTION_MESH_GROUP_KEY_ACK5 5
1226
1227/* 11s draft 12.0, table 7-43bj6: Mesh Peering Protocol Identifier field values */
1228#define MESH_PEERING_PROTO_MGMT0 0
1229#define MESH_PEERING_PROTO_AMPE1 1
1230#define MESH_PEERING_PROTO_VENDOR255 255
1231
1232/* Vendor actions */
1233/* MARVELL */
1234#define MRVL_ACTION_MESH_MANAGEMENT1 1
1235
1236#define MRVL_MESH_MGMT_ACTION_RREQ0 0
1237#define MRVL_MESH_MGMT_ACTION_RREP1 1
1238#define MRVL_MESH_MGMT_ACTION_RERR2 2
1239#define MRVL_MESH_MGMT_ACTION_PLDM3 3
1240
1241#define ANQP_INFO_ANQP_QUERY_LIST256 256
1242#define ANQP_INFO_ANQP_CAPAB_LIST257 257
1243#define ANQP_INFO_VENUE_NAME_INFO258 258
1244#define ANQP_INFO_EMERGENCY_CALL_NUMBER_INFO259 259
1245#define ANQP_INFO_NETWORK_AUTH_TYPE_INFO260 260
1246#define ANQP_INFO_ROAMING_CONSORTIUM_LIST261 261
1247#define ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO262 262
1248#define ANQP_INFO_NAI_REALM_LIST263 263
1249#define ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO264 264
1250#define ANQP_INFO_AP_GEOSPATIAL_LOCATION265 265
1251#define ANQP_INFO_AP_CIVIC_LOCATION266 266
1252#define ANQP_INFO_AP_LOCATION_PUBLIC_ID_URI267 267
1253#define ANQP_INFO_DOMAIN_NAME_LIST268 268
1254#define ANQP_INFO_EMERGENCY_ALERT_ID_URI269 269
1255#define ANQP_INFO_TDLS_CAPAB_INFO270 270
1256#define ANQP_INFO_EMERGENCY_NAI271 271
1257#define ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797 56797
1258
1259/* ANQP information ID - IEEE Std 802.11u-2011 - Table 7-43bk */
1260static const value_string anqp_info_id_vals[] = {
1261 {ANQP_INFO_ANQP_QUERY_LIST256, "ANQP Query list"},
1262 {ANQP_INFO_ANQP_CAPAB_LIST257, "ANQP Capability list"},
1263 {ANQP_INFO_VENUE_NAME_INFO258, "Venue Name information"},
1264 {ANQP_INFO_EMERGENCY_CALL_NUMBER_INFO259, "Emergency Call Number information"},
1265 {ANQP_INFO_NETWORK_AUTH_TYPE_INFO260,
1266 "Network Authentication Type information"},
1267 {ANQP_INFO_ROAMING_CONSORTIUM_LIST261, "Roaming Consortium list"},
1268 {ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO262,
1269 "IP Address Type Availability information"},
1270 {ANQP_INFO_NAI_REALM_LIST263, "NAI Realm list"},
1271 {ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO264, "3GPP Cellular Network information"},
1272 {ANQP_INFO_AP_GEOSPATIAL_LOCATION265, "AP Geospatial Location"},
1273 {ANQP_INFO_AP_CIVIC_LOCATION266, "AP Civic Location"},
1274 {ANQP_INFO_AP_LOCATION_PUBLIC_ID_URI267, "AP Location Public Identifier URI"},
1275 {ANQP_INFO_DOMAIN_NAME_LIST268, "Domain Name list"},
1276 {ANQP_INFO_EMERGENCY_ALERT_ID_URI269, "Emergency Alert Identifier URI"},
1277 {ANQP_INFO_TDLS_CAPAB_INFO270, "TDLS Capability information"},
1278 {ANQP_INFO_EMERGENCY_NAI271, "Emergency NAI"},
1279 {ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797, "ANQP vendor-specific list"},
1280 {0, NULL((void*)0)}
1281};
1282static value_string_ext anqp_info_id_vals_ext = VALUE_STRING_EXT_INIT(anqp_info_id_vals){ _try_val_to_str_ext_init, 0, (sizeof (anqp_info_id_vals) / sizeof
((anqp_info_id_vals)[0]))-1, anqp_info_id_vals, "anqp_info_id_vals"
}
;
1283
1284/* IEEE 802.11v - WNM Action field values */
1285enum wnm_action {
1286 WNM_EVENT_REQ = 0,
1287 WNM_EVENT_REPORT = 1,
1288 WNM_DIAGNOSTIC_REQ = 2,
1289 WNM_DIAGNOSTIC_REPORT = 3,
1290 WNM_LOCATION_CFG_REQ = 4,
1291 WNM_LOCATION_CFG_RESP = 5,
1292 WNM_BSS_TRANS_MGMT_QUERY = 6,
1293 WNM_BSS_TRANS_MGMT_REQ = 7,
1294 WNM_BSS_TRANS_MGMT_RESP = 8,
1295 WNM_FMS_REQ = 9,
1296 WNM_FMS_RESP = 10,
1297 WNM_COLLOCATED_INTERFERENCE_REQ = 11,
1298 WNM_COLLOCATED_INTERFERENCE_REPORT = 12,
1299 WNM_TFS_REQ = 13,
1300 WNM_TFS_RESP = 14,
1301 WNM_TFS_NOTIFY = 15,
1302 WNM_SLEEP_MODE_REQ = 16,
1303 WNM_SLEEP_MODE_RESP = 17,
1304 WNM_TIM_BROADCAST_REQ = 18,
1305 WNM_TIM_BROADCAST_RESP = 19,
1306 WNM_QOS_TRAFFIC_CAPAB_UPDATE = 20,
1307 WNM_CHANNEL_USAGE_REQ = 21,
1308 WNM_CHANNEL_USAGE_RESP = 22,
1309 WNM_DMS_REQ = 23,
1310 WNM_DMS_RESP = 24,
1311 WNM_TIMING_MEASUREMENT_REQ = 25,
1312 WNM_NOTIFICATION_REQ = 26,
1313 WNM_NOTIFICATION_RESP = 27
1314};
1315
1316static const value_string wnm_action_codes[] = {
1317 { WNM_EVENT_REQ, "Event Request" },
1318 { WNM_EVENT_REPORT, "Event Report" },
1319 { WNM_DIAGNOSTIC_REQ, "Diagnostic Request" },
1320 { WNM_DIAGNOSTIC_REPORT, "Diagnostic Report" },
1321 { WNM_LOCATION_CFG_REQ, "Location Configuration Request" },
1322 { WNM_LOCATION_CFG_RESP, "Location Configuration Response" },
1323 { WNM_BSS_TRANS_MGMT_QUERY, "BSS Transition Management Query" },
1324 { WNM_BSS_TRANS_MGMT_REQ, "BSS Transition Management Request" },
1325 { WNM_BSS_TRANS_MGMT_RESP, "BSS Transition Management Response" },
1326 { WNM_FMS_REQ, "FMS Request" },
1327 { WNM_FMS_RESP, "FMS Response" },
1328 { WNM_COLLOCATED_INTERFERENCE_REQ, "Collocated Interference Request" },
1329 { WNM_COLLOCATED_INTERFERENCE_REPORT, "Collocated Interference Report" },
1330 { WNM_TFS_REQ, "TFS Request" },
1331 { WNM_TFS_RESP, "TFS Response" },
1332 { WNM_TFS_NOTIFY, "TFS Notify" },
1333 { WNM_SLEEP_MODE_REQ, "WNM-Sleep Mode Request" },
1334 { WNM_SLEEP_MODE_RESP, "WNM-Sleep Mode Response" },
1335 { WNM_TIM_BROADCAST_REQ, "TIM Broadcast Request" },
1336 { WNM_TIM_BROADCAST_RESP, "TIM Broadcast Response" },
1337 { WNM_QOS_TRAFFIC_CAPAB_UPDATE, "QoS Traffic Capability Update" },
1338 { WNM_CHANNEL_USAGE_REQ, "Channel Usage Request" },
1339 { WNM_CHANNEL_USAGE_RESP, "Channel Usage Response" },
1340 { WNM_DMS_REQ, "DMS Request" },
1341 { WNM_DMS_RESP, "DMS Response" },
1342 { WNM_TIMING_MEASUREMENT_REQ, "Timing Measurement Request" },
1343 { WNM_NOTIFICATION_REQ, "WNM-Notification Request" },
1344 { WNM_NOTIFICATION_RESP, "WNM-Notification Response" },
1345 { 0, NULL((void*)0) }
1346};
1347static value_string_ext wnm_action_codes_ext = VALUE_STRING_EXT_INIT(wnm_action_codes){ _try_val_to_str_ext_init, 0, (sizeof (wnm_action_codes) / sizeof
((wnm_action_codes)[0]))-1, wnm_action_codes, "wnm_action_codes"
}
;
1348
1349enum unprotected_wnm_action {
1350 UNPROTECTED_WNM_TIM = 0,
1351 UNPROTECTED_WNM_TIMING_MEASUREMENT = 1
1352};
1353
1354static const value_string unprotected_wnm_action_codes[] = {
1355 { UNPROTECTED_WNM_TIM, "TIM" },
1356 { UNPROTECTED_WNM_TIMING_MEASUREMENT, "Timing Measurement" },
1357 { 0, NULL((void*)0) }
1358};
1359static value_string_ext unprotected_wnm_action_codes_ext = VALUE_STRING_EXT_INIT(unprotected_wnm_action_codes){ _try_val_to_str_ext_init, 0, (sizeof (unprotected_wnm_action_codes
) / sizeof ((unprotected_wnm_action_codes)[0]))-1, unprotected_wnm_action_codes
, "unprotected_wnm_action_codes" }
;
1360
1361static const value_string wnm_notification_types[] = {
1362 { 0, "Firmware Update Notification" },
1363 { 1, "Reserved for use by WFA" },
1364 { 221, "Vendor Specific" },
1365 { 0, NULL((void*)0) }
1366};
1367
1368static value_string_ext wnm_notification_types_ext =
1369 VALUE_STRING_EXT_INIT(wnm_notification_types){ _try_val_to_str_ext_init, 0, (sizeof (wnm_notification_types
) / sizeof ((wnm_notification_types)[0]))-1, wnm_notification_types
, "wnm_notification_types" }
;
1370
1371/*** End: Action Fixed Parameter ***/
1372
1373static const value_string ieee80211_tag_measure_request_type_flags[] = {
1374 {0x00, "Basic Request"},
1375 {0x01, "Clear Channel Assessment (CCA) Request"},
1376 {0x02, "Receive Power Indication (RPI) Histogram Request"},
1377 {0x03, "Channel Load Request"},
1378 {0x04, "Noise Histogram Request"},
1379 {0x05, "Beacon Request"},
1380 {0x06, "Frame Request"},
1381 {0x07, "STA Statistics Request"},
1382 {0x08, "Location Configuration Indication (LCI) Request"},
1383 {0x09, "Transmit Stream Measurement Request"},
1384 {0x0A, "Measurement Pause Request"},
1385 {0x00, NULL((void*)0)}
1386};
1387static value_string_ext ieee80211_tag_measure_request_type_flags_ext =
1388 VALUE_STRING_EXT_INIT(ieee80211_tag_measure_request_type_flags){ _try_val_to_str_ext_init, 0, (sizeof (ieee80211_tag_measure_request_type_flags
) / sizeof ((ieee80211_tag_measure_request_type_flags)[0]))-1
, ieee80211_tag_measure_request_type_flags, "ieee80211_tag_measure_request_type_flags"
}
;
1389
1390static const value_string ieee80211_tag_measure_report_type_flags[] = {
1391 { 0x00, "Basic Report" },
1392 { 0x01, "Clear Channel Assessment (CCA) Report" },
1393 { 0x02, "Receive Power Indication (RPI) Histogram Report" },
1394 { 0x03, "Channel Load Report" },
1395 { 0x04, "Noise Histogram Report" },
1396 { 0x05, "Beacon Report" },
1397 { 0x06, "Frame Report" },
1398 { 0x07, "STA Statistics Report" },
1399 { 0x08, "Location Configuration Information (LCI) Report" },
1400 { 0x09, "Transmit Stream Measurement Report" },
1401 { 0x00, NULL((void*)0) }
1402};
1403static value_string_ext ieee80211_tag_measure_report_type_flags_ext =
1404 VALUE_STRING_EXT_INIT(ieee80211_tag_measure_report_type_flags){ _try_val_to_str_ext_init, 0, (sizeof (ieee80211_tag_measure_report_type_flags
) / sizeof ((ieee80211_tag_measure_report_type_flags)[0]))-1,
ieee80211_tag_measure_report_type_flags, "ieee80211_tag_measure_report_type_flags"
}
;
1405
1406static const true_false_string ieee80211_tag_measure_report_frame_info_frame_type_flag = {
1407 "Measurement Pilot Frame",
1408 "Beacon/Probe Response Frame"
1409};
1410
1411static const true_false_string ieee80211_tag_measure_map_field_bss_flag = {
1412 "At least one MPDU was received by another BSS or IBSS in the measurement period.",
1413 "No MPDUs were received from another BSS or IBSS in the measurement period."
1414};
1415
1416static const value_string ieee80211_tag_measure_request_measurement_mode_flags[] = {
1417 { 0x00, "Passive" },
1418 { 0x01, "Active" },
1419 { 0x02, "Beacon Table" },
1420 { 0x00, NULL((void*)0) }
1421};
1422
1423#define MEASURE_REQ_BEACON_SUB_SSID0 0
1424#define MEASURE_REQ_BEACON_SUB_BRI1 1
1425#define MEASURE_REQ_BEACON_SUB_RD2 2
1426#define MEASURE_REQ_BEACON_SUB_REQUEST10 10
1427#define MEASURE_REQ_BEACON_SUB_APCP51 51
1428#define MEASURE_REQ_BEACON_SUB_VS221 221
1429
1430static const value_string ieee80211_tag_measure_request_beacon_sub_id_flags[] = {
1431 { MEASURE_REQ_BEACON_SUB_SSID0, "SSID" },
1432 { MEASURE_REQ_BEACON_SUB_BRI1, "Beacon Reporting Information" },
1433 { MEASURE_REQ_BEACON_SUB_RD2, "Reporting Detail" },
1434 { MEASURE_REQ_BEACON_SUB_REQUEST10, "Request" },
1435 { MEASURE_REQ_BEACON_SUB_APCP51, "AP Channel Report" },
1436 { MEASURE_REQ_BEACON_SUB_VS221, "Vendor Specific" },
1437 { 0x00, NULL((void*)0)}
1438};
1439
1440static const value_string ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition_flags[] = {
1441 { 0x00, "Report to be issued after each measurement." },
1442 { 0x01, "The measured RCPI level is greater than an absolute threshold." },
1443 { 0x02, "The measured RCPI level is less than an absolute threshold." },
1444 { 0x03, "The measured RSNI level is greater than an absolute threshold." },
1445 { 0x04, "The measured RSNI level is less than an absolute threshold." },
1446 { 0x05, "The measured RCPI level is greater than a threshold defined by an offset from the serving AP's reference RCPI." },
1447 { 0x06, "The measured RCPI level is less than a threshold defined by an offset from the serving AP's reference RCPI." },
1448 { 0x07, "The measured RSNI level is greater than a threshold defined by an offset from the serving AP's reference RSNI." },
1449 { 0x08, "The measured RSNI level is less than a threshold defined by an offset from the serving AP's reference RSNI." },
1450 { 0x09, "The measured RCPI level is in a range bound by the serving AP's reference RCPI and an offset from the serving AP's reference RCPI." },
1451 { 0x0a, "The measured RSNI level is in a range bound by the serving AP's reference RSNI and an offset from the serving AP's reference RSNI." },
1452 { 0xfe, "Report not required to be issued" },
1453 { 0x00, NULL((void*)0) }
1454};
1455
1456static const value_string ieee80211_tag_measure_request_beacon_sub_reporting_detail_flags[] = {
1457 { 0, "No fixed length fields or elements" },
1458 { 1, "All fixed length fields and any requested elements in the Request information element if present" },
1459 { 2, "All fixed length fields and elements (default, used when Reporting Detail subelement is not included in Beacon Request" },
1460 { 0x00, NULL((void*)0) }
1461};
1462
1463static const value_string ieee80211_tag_measure_request_group_id_flags[] = {
1464 { 0x00, "STA Counters from dot11CountersTable" },
1465 { 0x01, "STA Counters from dot11MacStatistics group" },
1466 { 0x02, "QoS STA Counters for UP0 from dot11QosCountersTable" },
1467 { 0x03, "QoS STA Counters for UP1 from dot11QosCountersTable" },
1468 { 0x04, "QoS STA Counters for UP2 from dot11QosCountersTable" },
1469 { 0x05, "QoS STA Counters for UP3 from dot11QosCountersTable" },
1470 { 0x06, "QoS STA Counters for UP4 from dot11QosCountersTable" },
1471 { 0x07, "QoS STA Counters for UP5 from dot11QosCountersTable" },
1472 { 0x08, "QoS STA Counters for UP6 from dot11QosCountersTable" },
1473 { 0x09, "QoS STA Counters for UP7 from dot11QosCountersTable" },
1474 { 0x0a, "BSS Average Access Delays" },
1475 { 0x0b, "STA Counters from dot11A-MSDU Group" },
1476 { 0x0c, "STA Counters from dot11A-MPDU Group" },
1477 { 0x0d, "STA Counters from dot11 BAR, Channel Width, PSMP Group" },
1478 { 0x0e, "STA Counters from dot11Protection Group" },
1479 { 0x0f, "STBC Group" },
1480 { 0x00, NULL((void*)0) }
1481};
1482static value_string_ext ieee80211_tag_measure_request_group_id_flags_ext =
1483 VALUE_STRING_EXT_INIT(ieee80211_tag_measure_request_group_id_flags){ _try_val_to_str_ext_init, 0, (sizeof (ieee80211_tag_measure_request_group_id_flags
) / sizeof ((ieee80211_tag_measure_request_group_id_flags)[0]
))-1, ieee80211_tag_measure_request_group_id_flags, "ieee80211_tag_measure_request_group_id_flags"
}
;
1484
1485static const value_string ieee80211_tclas_process_flag[] = {
1486 {0x00, "Incoming MSDU's higher layer parameters have to match to the parameters in all associated TCLAS elements."},
1487 {0x01, "Incoming MSDU's higher layer parameters have to match to at least one of the associated TCLAS elements."},
1488 {0x02, "Incoming MSDU's that do not belong to any other TS are classified to the TS for which this TCLAS Processing element is used. In this case, there will not be any associated TCLAS elements."},
1489 {0, NULL((void*)0)}
1490};
1491
1492
1493#define MEASURE_REQ_CHANNEL_LOAD_SUB_REPORTING_INFO1 1
1494
1495static const value_string ieee80211_tag_measure_request_channel_load_sub_id_vals[] = {
1496 { MEASURE_REQ_CHANNEL_LOAD_SUB_REPORTING_INFO1, "Channel Load Reporting Information" },
1497 { 221, "Vendor Specific" },
1498 { 0x00, NULL((void*)0)}
1499};
1500
1501static const value_string ieee80211_tag_measure_request_channel_load_sub_reporting_condition_vals[] = {
1502 { 0x00, "Report to be issued after each measurement (default, used when Channel Load Reporting Information subelement is not included in Channel Load Request)." },
1503 { 0x01, "Report to be issued when measured Channel Load is equal to or greater than the reference value." },
1504 { 0x02, "Report to be issued when measured Channel Load is equal to or less than the reference value." },
1505 { 0x00, NULL((void*)0)}
1506};
1507
1508#define MEASURE_REQ_NOISE_HISTOGRAM_SUB_REPORTING_INFO1 1
1509
1510static const value_string ieee80211_tag_measure_request_noise_histogram_sub_id_vals[] = {
1511 { MEASURE_REQ_NOISE_HISTOGRAM_SUB_REPORTING_INFO1, "Noise Histogram Reporting Information" },
1512 { 221, "Vendor Specific" },
1513 { 0x00, NULL((void*)0)}
1514};
1515
1516static const value_string ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition_vals[] = {
1517 { 0x00, "Report to be issued after each measurement (default, used when Noise Histogram Reporting Information subelement is not included in Noise Histogram Request)." },
1518 { 0x01, "Noise Histogram Report to be issued when measured ANPI is equal to or greater than the reference value." },
1519 { 0x02, "Noise Histogram Report to be issued when measured ANPI is equal to or less than the reference value." },
1520 { 0x00, NULL((void*)0)}
1521};
1522
1523#define MEASURE_REP_REPORTED_FRAME_BODY1 1
1524
1525static const value_string ieee80211_tag_measure_report_beacon_sub_id_vals[] = {
1526 { MEASURE_REP_REPORTED_FRAME_BODY1, "Reported Frame Body" },
1527 { 221, "Vendor Specific" },
1528 { 0x00, NULL((void*)0)}
1529};
1530
1531static const value_string frame_type[] = {
1532 {MGT_FRAME0x00, "Management frame"},
1533 {CONTROL_FRAME0x01, "Control frame"},
1534 {DATA_FRAME0x02, "Data frame"},
1535 {EXTENSION_FRAME0x03, "Extension frame"},
1536 {0, NULL((void*)0)}
1537};
1538
1539static const value_string tofrom_ds[] = {
1540 {0, "Not leaving DS or network is operating "
1541 "in AD-HOC mode (To DS: 0 From DS: 0)"},
1542 {FLAG_TO_DS0x01, "Frame from STA to DS via an AP (To DS: 1 "
1543 "From DS: 0)"},
1544 {FLAG_FROM_DS0x02, "Frame from DS to a STA via AP(To DS: 0 "
1545 "From DS: 1)"},
1546 {FLAG_TO_DS0x01|FLAG_FROM_DS0x02, "WDS (AP to AP) or Mesh (MP to MP) Frame "
1547 "(To DS: 1 From DS: 1)"},
1548 {0, NULL((void*)0)}
1549};
1550
1551static const true_false_string tods_flag = {
1552 "Frame is entering DS",
1553 "Frame is not entering DS"
1554};
1555
1556static const true_false_string fromds_flag = {
1557 "Frame is exiting DS",
1558 "Frame is not exiting DS"
1559};
1560
1561static const true_false_string more_fragments = {
1562 "More fragments follow",
1563 "This is the last fragment"
1564};
1565
1566static const true_false_string retry_flags = {
1567 "Frame is being retransmitted",
1568 "Frame is not being retransmitted"
1569};
1570
1571static const true_false_string pm_flags = {
1572 "STA will go to sleep",
1573 "STA will stay up"
1574};
1575
1576static const true_false_string md_flags = {
1577 "Data is buffered for STA at AP",
1578 "No data buffered"
1579};
1580
1581static const true_false_string protected_flags = {
1582 "Data is protected",
1583 "Data is not protected"
1584};
1585
1586static const true_false_string order_flags = {
1587 "Strictly ordered",
1588 "Not strictly ordered"
1589};
1590
1591static const true_false_string cf_ess_flags = {
1592 "Transmitter is an AP",
1593 "Transmitter is a STA"
1594};
1595
1596
1597static const true_false_string cf_privacy_flags = {
1598 "AP/STA can support WEP",
1599 "AP/STA cannot support WEP"
1600};
1601
1602static const true_false_string cf_ibss_flags = {
1603 "Transmitter belongs to an IBSS",
1604 "Transmitter belongs to a BSS"
1605};
1606
1607static const true_false_string eosp_flag = {
1608 "End of service period",
1609 "Service period"
1610};
1611
1612static const true_false_string bit4_flag = {
1613 "Bits 8-15 of QoS Control field are Queue Size",
1614 "Bits 8-15 of QoS Control field are TXOP Duration Requested"
1615};
1616
1617static const true_false_string ieee80211_qos_amsdu_present_flag = {
1618 "A-MSDU",
1619 "MSDU"
1620};
1621
1622static const true_false_string csa_txrestrict_flags = {
1623 "Tx Restrict",
1624 "No Tx Restrict"
1625};
1626
1627static const true_false_string csa_initiator_flags = {
1628 "Initiator",
1629 "Non Initiator"
1630};
1631
1632static const true_false_string mesh_config_cap_power_save_level_flags = {
1633 "One of the peer-specific mesh power modes is deep sleep mode",
1634 "No one is in deep sleep mode"
1635};
1636
1637static const value_string sta_cf_pollable[] = {
1638 {0x00, "Station is not CF-Pollable"},
1639 {0x02, "Station is CF-Pollable, not requesting to be placed on the CF-polling list"},
1640 {0x01, "Station is CF-Pollable, requesting to be placed on the CF-polling list"},
1641 {0x03, "Station is CF-Pollable, requesting never to be polled"},
1642 {0x80, "QSTA requesting association in QBSS"},
1643 {0x81, "Reserved"},
1644 {0x82, "Reserved"},
1645 {0x83, "Reserved"},
1646 {0, NULL((void*)0)}
1647};
1648
1649static const value_string ap_cf_pollable[] = {
1650 {0x00, "No point coordinator at AP"},
1651 {0x02, "Point coordinator at AP for delivery only (no polling)"},
1652 {0x01, "Point coordinator at AP for delivery and polling"},
1653 {0x03, "Reserved"},
1654 {0x80, "QAP (HC) does not use CFP for delivery of unicast data type frames"},
1655 {0x82, "QAP (HC) uses CFP for delivery, but does not send CF-Polls to non-QoS STAs"},
1656 {0x81, "QAP (HC) uses CFP for delivery, and sends CF-Polls to non-QoS STAs"},
1657 {0x83, "Reserved"},
1658 {0, NULL((void*)0)}
1659};
1660
1661
1662static const value_string auth_alg[] = {
1663 {0x00, "Open System"},
1664 {0x01, "Shared key"},
1665 {0x02, "Fast BSS Transition"},
1666 {0x03, "Simultaneous Authentication of Equals (SAE)"},
1667 {0x80, "Network EAP"}, /* Cisco proprietary? */
1668 {0, NULL((void*)0)}
1669};
1670
1671static const true_false_string ff_block_ack_params_amsdu_permitted_flag = {
1672 "Permitted in QoS Data MPDUs",
1673 "Not Permitted"
1674};
1675
1676static const true_false_string ff_block_ack_params_policy_flag = {
1677 "Immediate Block Ack",
1678 "Delayed Block Ack"
1679};
1680
1681static const value_string ff_channel_width_vals[] = {
1682 {0x00, "20 MHz channel width only"},
1683 {0x01, "Any channel width in the STA's Supported Channel Width Set"},
1684 {0, NULL((void*)0)}
1685};
1686
1687static const true_false_string ff_qos_info_ap_q_ack_flag = {
1688 "APs MIB attribute dot11QAckOptionImplemented is true",
1689 "APs MIB attribute dot11QAckOptionImplemented is false"
1690};
1691
1692static const true_false_string ff_qos_info_ap_queue_req_flag = {
1693 "AP can process a nonzero Queue Size subfield in the QoS Control field in QoS data frames",
1694 "AP cannot process a nonzero Queue Size subfield in the QoS Control field in QoS data frames"
1695};
1696
1697static const true_false_string ff_qos_info_ap_txop_request_flag = {
1698 "AP can process a nonzero TXOP Duration Requested subfield in the QoS Control field in QoS data frames",
1699 "AP cannot process a nonzero TXOP Duration Requested subfield in the QoS Control field in QoS data frames"
1700};
1701
1702static const true_false_string ff_qos_info_sta_ac_flag = {
1703 "Trigger-enabled and Delivery-enabled",
1704 "Neither Trigger-enabled nor Delivery-enabled"
1705};
1706
1707static const true_false_string ff_qos_info_sta_q_ack_flag = {
1708 "STAs MIB attribute dot11QAckOptionImplemented is true",
1709 "STAs MIB attribute dot11QAckOptionImplemented is false"
1710};
1711
1712static const value_string ff_qos_info_sta_max_sp_len_flags[] = {
1713 {0x00, "AP may deliver all buffered MSDUs, A-MSDUs and MMPDUs"},
1714 {0x01, "AP may deliver a maximum of two MSDUs, A-MSDUs and MMPDUs per SP"},
1715 {0x02, "AP may deliver a maximum of four MSDUs, A-MSDUs and MMPDUs per SP"},
1716 {0x03, "AP may deliver a maximum of six MSDUs, A-MSDUs and MMPDUs per SP"},
1717 {0, NULL((void*)0)}
1718};
1719
1720static const true_false_string ff_qos_info_sta_more_data_ack_flag = {
1721 "STA can process ACK frames with the More Data bit in the Frame Control field set to 1 and will remain in the wake state",
1722 "STA cannot process ACK frames with the More Data bit in the Frame Control field set to 1"
1723};
1724
1725static const true_false_string ff_sm_pwr_save_sm_mode_flag = {
1726 "Dynamic SM Power Save mode",
1727 "Static SM Power Save mode"
1728};
1729
1730static const true_false_string ff_pco_phase_cntrl_flag = {
1731 "40 MHz Phase",
1732 "20 MHz Phase"
1733};
1734
1735static const true_false_string ff_psmp_param_set_more_psmp_flag = {
1736 "More PSMP Sequences Follow",
1737 "No PSMP Sequences Follow"
1738};
1739
1740static const value_string ff_mimo_cntrl_nc_index_flags[] = {
1741 {0x00, "1 Column"},
1742 {0x01, "2 Columns"},
1743 {0x02, "3 Columns"},
1744 {0x03, "4 Columns"},
1745 {0, NULL((void*)0)}
1746};
1747
1748static const value_string ff_mimo_cntrl_nr_index_flags[] = {
1749 {0x00, "1 Row"},
1750 {0x01, "2 Rows"},
1751 {0x02, "3 Rows"},
1752 {0x03, "4 Rows"},
1753 {0, NULL((void*)0)}
1754};
1755
1756static const true_false_string ff_mimo_cntrl_channel_width_flag = {
1757 "40 MHz",
1758 "20 MHz"
1759};
1760
1761static const true_false_string ff_ht_info_information_request_flag = {
1762 "Requesting HT Information Exchange management action frame",
1763 "Should not send an HT Information Exchange management action frame"
1764};
1765
1766static const true_false_string ff_ht_info_40_mhz_intolerant_flag = {
1767 "Transmitting station is intolerant of 40 MHz operation",
1768 "Transmitting station permits 40 MHz operation"
1769};
1770
1771static const true_false_string ff_ht_info_sta_chan_width_flag = {
1772 "40 MHz",
1773 "20 MHz"
1774};
1775
1776static const value_string ff_ht_action_flags[] = {
1777 {HT_ACTION_NOTIFY_CHAN_WIDTH0, "Notify Channel Width"},
1778 {HT_ACTION_SM_PWR_SAVE1, "Spatial Multiplexing (SM) Power Save"},
1779 {HT_ACTION_PSMP_ACTION2, "Power Save Multi-Poll (PSMP) action frame"},
1780 {HT_ACTION_SET_PCO_PHASE3, "Set PCO Phase"},
1781 {HT_ACTION_MIMO_CSI4, "MIMO CSI Matrices"},
1782 {HT_ACTION_MIMO_BEAMFORMING5, "MIMO Non-compressed Beamforming"},
1783 {HT_ACTION_MIMO_COMPRESSED_BEAMFORMING6, "MIMO Compressed Beamforming"},
1784 {HT_ACTION_ANT_SEL_FEEDBACK7, "Antenna Selection Indices Feedback"},
1785 {HT_ACTION_HT_INFO_EXCHANGE8, "HT Information Exchange"},
1786 {0x00, NULL((void*)0)}
1787};
1788
1789static const value_string ff_fst_action_flags[] = {
1790 {FST_SETUP_REQUEST0, "FST Setup Request"},
1791 {FST_SETUP_RESPONSE1, "FST Setup Response"},
1792 {FST_TEAR_DOWN2, "FST Tear Down"},
1793 {FST_ACK_REQUEST3, "FST Ack Request"},
1794 {FST_ACK_RESPONSE4, "FST Ack Response"},
1795 {FST_ON_CHANNEL_TUNNEL_REQUEST5, "FST On-channel Tunnel Request"},
1796 {0x00, NULL((void*)0)}
1797};
1798
1799static const value_string ff_dmg_action_flags[] = {
1800 {DMG_ACTION_PWR_SAVE_CONFIG_REQ0, "Power Save Configuration Request"},
1801 {DMG_ACTION_PWR_SAVE_CONFIG_RES1, "Power Save Configuration Response"},
1802 {DMG_ACTION_INFO_REQ2, "Information Request"},
1803 {DMG_ACTION_INFO_RES3, "Information Response"},
1804 {DMG_ACTION_HANDOVER_REQ4, "Handover Request"},
1805 {DMG_ACTION_HANDOVER_RES5, "Handover Response"},
1806 {DMG_ACTION_DTP_REQ6, "DTP Request"},
1807 {DMG_ACTION_DTP_RES7, "DTP Response"},
1808 {DMG_ACTION_RELAY_SEARCH_REQ8, "Relay Search Request"},
1809 {DMG_ACTION_RELAY_SEARCH_RES9, "Relay Search Response"},
1810 {DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ10, "Multi Relay Channel Measurement Request"},
1811 {DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES11, "Multi Relay Channel Measurement Response"},
1812 {DMG_ACTION_RLS_REQ12, "RLS Request"},
1813 {DMG_ACTION_RLS_RES13, "RLS Response"},
1814 {DMG_ACTION_RLS_ANNOUNCE14, "RLS Announcement"},
1815 {DMG_ACTION_RLS_TEARDOWN15, "RLS Teardown"},
1816 {DMG_ACTION_RELAY_ACK_REQ16, "Relay ACK Request"},
1817 {DMG_ACTION_RELAY_ACK_RES17, "Relay ACK Response"},
1818 {DMG_ACTION_TPA_REQ18, "TPA Request"},
1819 {DMG_ACTION_TPA_RES19, "TPA Response"},
1820 {DMG_ACTION_TPA_REP20, "TPA Report"},
1821 {DMG_ACTION_ROC_REQ21, "ROC Request"},
1822 {DMG_ACTION_ROC_RES22, "ROC Response"},
1823 {0x00, NULL((void*)0)}
1824};
1825
1826static const value_string ff_unprotected_dmg_action_flags[] = {
1827 {UNPROTECTED_DMG_ANNOUNCE0, "Announce"},
1828 {UNPROTECTED_DMG_BRP1, "BRP"},
1829 {0x00, NULL((void*)0)}
1830};
1831static const value_string ff_mimo_cntrl_grouping_flags[] = {
1832 {0x00, "No Grouping"},
1833 {0x01, "Carrier Groups of 2"},
1834 {0x02, "Carrier Groups of 4"},
1835 {0x03, "Reserved"},
1836 {0, NULL((void*)0)}
1837};
1838
1839static const value_string ff_mimo_cntrl_coefficient_size_flags[] = {
1840 {0x00, "4 Bits"},
1841 {0x01, "5 Bits"},
1842 {0x02, "6 Bits"},
1843 {0x03, "8 Bits"},
1844 {0, NULL((void*)0)}
1845};
1846
1847static const value_string ff_mimo_cntrl_codebook_info_flags[] = {
1848 {0x00, "1 bit for 'Capital Psi', 3 bits for 'Small Psi'"},
1849 {0x01, "2 bit for 'Capital Psi', 4 bits for 'Small Psi'"},
1850 {0x02, "3 bit for 'Capital Psi', 5 bits for 'Small Psi'"},
1851 {0x03, "4 bit for 'Capital Psi', 6 bits for 'Small Psi'"},
1852 {0, NULL((void*)0)}
1853};
1854
1855static const value_string ff_ppa_action_codes[] = {
1856 {PPA_DSE_ENABLEMENT1, "Protected DSE enablement"},
1857 {PPA_DSE_DEENABLEMENT2, "Protected DSE deenablement"},
1858 {PPA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4, "Protected Extended Channel Switch Announcement"},
1859 {PPA_DSE_MEASUREMENT_REQUEST5, "Protected DSE measurement request"},
1860 {PPA_DSE_MEASUREMENT_REPORT6, "Protected DSE measurement report"},
1861 {PPA_DSE_POWER_CONSTRAINT8, "Protected DSE power constraint"},
1862 {PPA_VENDOR_SPECIFIC9, "Protected Vendor Specific"},
1863 {PPA_GAS_INITIAL_REQUEST10, "Protected GAS Initial Request"},
1864 {PPA_GAS_INITIAL_RESPONSE11, "Protected GAS Initial Response"},
1865 {PPA_GAS_COMEBACK_REQUEST12, "Protected GAS Comeback Request"},
1866 {PPA_GAS_COMEBACK_RESPONSE13, "Protected GAS Comeback Response"},
1867 {PPA_QAB_REQUEST16, "Protected QAB Request"},
1868 {PPA_QAB_RESPONSE17, "Protected QAB Response"},
1869 {0x00, NULL((void*)0)}
1870};
1871static value_string_ext ff_ppa_action_codes_ext = VALUE_STRING_EXT_INIT(ff_ppa_action_codes){ _try_val_to_str_ext_init, 0, (sizeof (ff_ppa_action_codes) /
sizeof ((ff_ppa_action_codes)[0]))-1, ff_ppa_action_codes, "ff_ppa_action_codes"
}
;
1872
1873static const value_string ff_pa_action_codes[] = {
1874 {PA_20_40_BSS_COEXISTENCE_MANAGEMENT0, "20/40 BSS Coexistence Management"},
1875 {PA_DSE_ENABLEMENT1, "DSE enablement"},
1876 {PA_DSE_DEENABLEMENT2, "DSE deenablement"},
1877 {PA_DSE_REG_LOC_ANNOUNCEMENT3, "DSE Registered Location Announcement"},
1878 {PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4, "Extended Channel Switch Announcement"},
1879 {PA_DSE_MEASUREMENT_REQUEST5, "DSE measurement request"},
1880 {PA_DSE_MEASUREMENT_REPORT6, "DSE measurement report"},
1881 {PA_MEASUREMENT_PILOT7, "Measurement Pilot"},
1882 {PA_DSE_POWER_CONSTRAINT8, "DSE power constraint"},
1883 {PA_VENDOR_SPECIFIC9, "Vendor Specific"},
1884 {PA_GAS_INITIAL_REQUEST10, "GAS Initial Request"},
1885 {PA_GAS_INITIAL_RESPONSE11, "GAS Initial Response"},
1886 {PA_GAS_COMEBACK_REQUEST12, "GAS Comeback Request"},
1887 {PA_GAS_COMEBACK_RESPONSE13, "GAS Comeback Response"},
1888 {PA_TDLS_DISCOVERY_RESPONSE14, "TDLS Discovery Response"},
1889 {PA_LOCATION_TRACK_NOTIFICATION15, "Location Track Notification"},
1890 {PA_QAB_REQUEST16, "QAB Request"},
1891 {PA_QAB_RESPONSE17, "QAB Response"},
1892 {0x00, NULL((void*)0)}
1893};
1894static value_string_ext ff_pa_action_codes_ext = VALUE_STRING_EXT_INIT(ff_pa_action_codes){ _try_val_to_str_ext_init, 0, (sizeof (ff_pa_action_codes) /
sizeof ((ff_pa_action_codes)[0]))-1, ff_pa_action_codes, "ff_pa_action_codes"
}
;
1895
1896static const value_string category_codes[] = {
1897 {CAT_SPECTRUM_MGMT0, "Spectrum Management (SM)"},
1898 {CAT_QOS1, "Quality of Service (QoS)"},
1899 {CAT_DLS2, "Direct-Link Setup (DLS)"},
1900 {CAT_BLOCK_ACK3, "Block Ack"},
1901 {CAT_PUBLIC4, "Public Action"},
1902 {CAT_RADIO_MEASUREMENT5, "Radio Measurement"},
1903 {CAT_FAST_BSS_TRANSITION6, "Fast BSS Transition"},
1904 {CAT_HT7, "High Throughput"},
1905 {CAT_SA_QUERY8, "SA Query"},
1906 {CAT_PUBLIC_PROTECTED9, "Protected Dual of Public Action"},
1907 {CAT_WNM10, "WNM"},
1908 {CAT_UNPROTECTED_WNM11, "Unprotected WNM"},
1909 {CAT_TDLS12, "TDLS"},
1910 {CAT_MESH13, "MESH"},
1911 {CAT_MULTIHOP14, "Multihop"},
1912 {CAT_SELF_PROTECTED15, "Self-protected"},
1913 {CAT_DMG16, "DMG"},
1914 {CAT_MGMT_NOTIFICATION17, "Management Notification"},
1915 {CAT_FAST_SESSION_TRANSFER18, "Fast Session Transfer"},
1916 {CAT_ROBUST_AV_STREAMING19, "Robust AV Streaming"},
1917 {CAT_UNPROTECTED_DMG20, "Unprotected DMG"},
1918 {CAT_VHT21, "VHT"},
1919 {CAT_VENDOR_SPECIFIC_PROTECTED126, "Vendor-specific Protected"},
1920 {CAT_VENDOR_SPECIFIC127, "Vendor Specific"},
1921
1922 {0x80 | CAT_SPECTRUM_MGMT0, "Spectrum Management (SM) (error)"},
1923 {0x80 | CAT_QOS1, "Quality of Service (QoS (error))"},
1924 {0x80 | CAT_DLS2, "Direct-Link Setup (DLS) (error)"},
1925 {0x80 | CAT_BLOCK_ACK3, "Block Ack (error)"},
1926 {0x80 | CAT_PUBLIC4, "Public Action (error)"},
1927 {0x80 | CAT_RADIO_MEASUREMENT5, "Radio Measurement (error)"},
1928 {0x80 | CAT_FAST_BSS_TRANSITION6, "Fast BSS Transition (error)"},
1929 {0x80 | CAT_HT7, "High Throughput (error)"},
1930 {0x80 | CAT_SA_QUERY8, "SA Query (error)"},
1931 {0x80 | CAT_PUBLIC_PROTECTED9, "Protected Dual of Public Action (error)"},
1932 {0x80 | CAT_WNM10, "WNM (error)"},
1933 {0x80 | CAT_UNPROTECTED_WNM11, "Unprotected WNM (error)"},
1934 {0x80 | CAT_TDLS12, "TDLS (error)"},
1935 {0x80 | CAT_MESH13, "Mesh (error)"},
1936 {0x80 | CAT_MULTIHOP14, "Multihop (error)"},
1937 {0x80 | CAT_SELF_PROTECTED15, "Self-protected (error)"},
1938 {0x80 | CAT_DMG16, "DMG (error)"},
1939 {0x80 | CAT_MGMT_NOTIFICATION17, "Management Notification (error)"},
1940 {0x80 | CAT_FAST_SESSION_TRANSFER18, "Fast Session Transfer (error)"},
1941 {0x80 | CAT_ROBUST_AV_STREAMING19, "Robust AV Streaming (error)"},
1942 {0x80 | CAT_UNPROTECTED_DMG20, "Unprotected DMG (error)"},
1943 {0x80 | CAT_VHT21, "VHT"},
1944 {0x80 | CAT_VENDOR_SPECIFIC_PROTECTED126, "Vendor-specific Protected (error)"},
1945 {0x80 | CAT_VENDOR_SPECIFIC127, "Vendor Specific (error)"},
1946 {0, NULL((void*)0)}
1947};
1948static value_string_ext category_codes_ext = VALUE_STRING_EXT_INIT(category_codes){ _try_val_to_str_ext_init, 0, (sizeof (category_codes) / sizeof
((category_codes)[0]))-1, category_codes, "category_codes" }
;
1949
1950#define NR_SUB_ID_TSF_INFO1 1
1951#define NR_SUB_ID_CON_COU_STR2 2
1952#define NR_SUB_ID_BSS_TRN_CAN_PREF3 3
1953#define NR_SUB_ID_BSS_TER_DUR4 4
1954#define NR_SUB_ID_BEARING5 5
1955
1956#define NR_SUB_ID_HT_CAPABILITIES45 45
1957#define NR_SUB_ID_HT_OPERATION61 61
1958#define NR_SUB_ID_SEC_CHANNEL_OFFSET62 62
1959#define NR_SUB_ID_MEASUREMENT_PILOT_INFO66 66
1960#define NR_SUB_ID_RM_ENABLE_CAP70 70
1961#define NR_SUB_ID_HT_MULTIPLE_BSSID71 71
1962
1963#define NR_SUB_ID_VENDOR_SPECIFIC221 221
1964
1965static const value_string ieee80211_neighbor_report_subelement_id_vals[] = {
1966 {NR_SUB_ID_TSF_INFO1, "TSF Information"},
1967 {NR_SUB_ID_CON_COU_STR2, "Condensed Country String"},
1968 {NR_SUB_ID_BSS_TRN_CAN_PREF3, "BSS Transition Candidate Preference"},
1969 {NR_SUB_ID_BSS_TER_DUR4, "BSS Termination Duration"},
1970 {NR_SUB_ID_BEARING5, "Bearing"},
1971 {NR_SUB_ID_HT_CAPABILITIES45, "HT Capabilities"},
1972 {NR_SUB_ID_HT_OPERATION61, "HT Operation"},
1973 {NR_SUB_ID_SEC_CHANNEL_OFFSET62, "Secondary Channel Offset"},
1974 {NR_SUB_ID_MEASUREMENT_PILOT_INFO66, "Measurement Pilot Transmission"},
1975 {NR_SUB_ID_RM_ENABLE_CAP70, "RM Enabled Capabilities"},
1976 {NR_SUB_ID_HT_MULTIPLE_BSSID71, "Multiple BSSID"},
1977 {NR_SUB_ID_VENDOR_SPECIFIC221, "Vendor Specific"},
1978 {0, NULL((void*)0)}
1979};
1980
1981static const value_string ieee80211_neighbor_report_bssid_info_reachability_vals[] = {
1982 {0, "Reserved"},
1983 {1, "Not Reachable"},
1984 {2, "Unknown"},
1985 {3, "Reachable"},
1986 {0, NULL((void*)0)}
1987};
1988
1989static const value_string action_codes[] = {
1990 {SM_ACTION_MEASUREMENT_REQUEST0, "Measurement Request"},
1991 {SM_ACTION_MEASUREMENT_REPORT1, "Measurement Report"},
1992 {SM_ACTION_TPC_REQUEST2, "TPC Request"},
1993 {SM_ACTION_TPC_REPORT3, "TPC Report"},
1994 {SM_ACTION_CHAN_SWITCH_ANNC4, "Channel Switch Announcement"},
1995 {0, NULL((void*)0)}
1996};
1997
1998static const value_string vendor_action_types_mrvl[] = {
1999 {MRVL_ACTION_MESH_MANAGEMENT1, "Mesh Management"},
2000 {0, NULL((void*)0)}
2001};
2002
2003static const value_string mesh_mgt_action_codes_mrvl[] = {
2004 {MRVL_MESH_MGMT_ACTION_RREQ0, "Route Request"},
2005 {MRVL_MESH_MGMT_ACTION_RREP1, "Route Response"},
2006 {MRVL_MESH_MGMT_ACTION_RERR2, "Route Error"},
2007 {MRVL_MESH_MGMT_ACTION_PLDM3, "Peer Link Down"},
2008 {0, NULL((void*)0)}
2009};
2010
2011static const value_string mesh_path_selection_codes[] = {
2012 {0x0, "Hybrid Wireless Mesh Protocol"},
2013 {0, NULL((void*)0)}
2014};
2015
2016static const value_string mesh_metric_codes[] = {
2017 {0x0, "Airtime Link Metric"},
2018 {0, NULL((void*)0)}
2019};
2020
2021static const value_string wme_action_codes[] = {
2022 {0x00, "Setup request"},
2023 {0x01, "Setup response"},
2024 {0x02, "Teardown"},
2025 {0x00, NULL((void*)0)}
2026};
2027
2028static const value_string wme_status_codes[] = {
2029 {0x00, "Admission accepted"},
2030 {0x01, "Invalid parameters"},
2031 {0x03, "Refused"},
2032 {0x00, NULL((void*)0)}
2033};
2034
2035static const value_string mesh_action[] = {
2036 {MESH_ACTION_LINK_METRIC_REPORT0, "Mesh Link Metric Report"},
2037 {MESH_ACTION_HWMP1, "HWMP Mesh Path Selection"},
2038 {MESH_ACTION_GATE_ANNOUNCE2, "Gate Announcement"},
2039 {MESH_ACTION_CONGESTION_CTL3, "Congestion Control Notification"},
2040 {MESH_ACTION_MCCA_SETUP_REQUEST4, "MCCA Setup Request"},
2041 {MESH_ACTION_MCCA_SETUP_REPLY5, "MCCA Setup Reply"},
2042 {MESH_ACTION_MCCA_ADV_REQUEST6, "MCCA Advertisement Request"},
2043 {MESH_ACTION_MCCA_ADV7, "MCCA Advertisement"},
2044 {MESH_ACTION_MCCA_TEARDOWN8, "MCCA Teardown"},
2045 {MESH_ACTION_TBTT_ADJ_REQUEST9, "TBTT Adjustment Request"},
2046 {MESH_ACTION_TBTT_ADJ_RESPONSE10, "TBTT Adjustment Response"},
2047 {0, NULL((void*)0)}
2048};
2049static value_string_ext mesh_action_ext = VALUE_STRING_EXT_INIT(mesh_action){ _try_val_to_str_ext_init, 0, (sizeof (mesh_action) / sizeof
((mesh_action)[0]))-1, mesh_action, "mesh_action" }
;
2050
2051static const value_string multihop_action[] = {
2052 {MULTIHOP_ACTION_PROXY_UPDATE0, "Proxy Update"},
2053 {MULTIHOP_ACTION_PROXY_UPDATE_CONF1, "Proxy Update Confirmation"},
2054 {0, NULL((void*)0)}
2055};
2056
2057static const value_string selfprot_action[] = {
2058 {SELFPROT_ACTION_MESH_PEERING_OPEN1, "Mesh Peering Open"},
2059 {SELFPROT_ACTION_MESH_PEERING_CONFIRM2, "Mesh Peering Confirm"},
2060 {SELFPROT_ACTION_MESH_PEERING_CLOSE3, "Mesh Peering Close"},
2061 {SELFPROT_ACTION_MESH_GROUP_KEY_INFORM4, "Mesh Group Key Inform"},
2062 {SELFPROT_ACTION_MESH_GROUP_KEY_ACK5, "Mesh Group Key Ack"},
2063 {0, NULL((void*)0)}
2064};
2065
2066static const value_string mesh_peering_proto_ids[] = {
2067 {MESH_PEERING_PROTO_MGMT0, "Mesh peering management protocol"},
2068 {MESH_PEERING_PROTO_AMPE1, "Authenticated mesh peering exchange protocol"},
2069 {MESH_PEERING_PROTO_VENDOR255, "Vendor specific"},
2070 {0, NULL((void*)0)}
2071};
2072
2073static const true_false_string hwmp_targ_usn_flags = {
2074 "[USN = 1] Target Sequence Number Unknown at Originator",
2075 "[USN = 0] Target Sequence Number Known at Originator"
2076};
2077
2078static const true_false_string hwmp_targ_to_flags = {
2079 "[TO = 1] Only Target Will Respond",
2080 "[TO = 0] Intermediate Nodes May Respond"
2081};
2082
2083static const value_string ack_policy[] = {
2084 {0x00, "Normal Ack"},
2085 {0x01, "No Ack"},
2086 {0x02, "No explicit acknowledgment"},
2087 {0x03, "Block Ack"},
2088 {0x00, NULL((void*)0)}
2089};
2090
2091static const value_string qos_action_codes[] = {
2092 {QOS_ACTION_ADDTS_REQUEST0, "ADDTS Request"},
2093 {QOS_ACTION_ADDTS_RESPONSE1, "ADDTS Response"},
2094 {QOS_ACTION_DELTS2, "DELTS"},
2095 {QOS_ACTION_SCHEDULE3, "Schedule"},
2096 {QOS_ACTION_MAP_CONFIGURE4, "QoS Map Configure"},
2097 {0, NULL((void*)0)}
2098};
2099
2100static const value_string ba_action_codes[] = {
2101 {BA_ADD_BLOCK_ACK_REQUEST0, "Add Block Ack Request"},
2102 {BA_ADD_BLOCK_ACK_RESPONSE1, "Add Block Ack Response"},
2103 {BA_DELETE_BLOCK_ACK2, "Delete Block Ack"},
2104 {0x00, NULL((void*)0)}
2105};
2106
2107static const value_string dls_action_codes[] = {
2108 {DLS_ACTION_REQUEST0, "DLS Request"},
2109 {DLS_ACTION_RESPONSE1, "DLS Response"},
2110 {DLS_ACTION_TEARDOWN2, "DLS Teardown"},
2111 {0, NULL((void*)0)}
2112};
2113
2114static const value_string tsinfo_type[] = {
2115 {0x0, "Aperiodic or unspecified Traffic"},
2116 {0x1, "Periodic Traffic"},
2117 {0, NULL((void*)0)}
2118};
2119
2120static const value_string tsinfo_direction[] = {
2121 {0x00, "Uplink"},
2122 {0x01, "Downlink"},
2123 {0x02, "Direct link"},
2124 {0x03, "Bidirectional link"},
2125 {0, NULL((void*)0)}
2126};
2127
2128static const value_string tsinfo_access[] = {
2129 {0x00, "Reserved"},
2130 {0x01, "EDCA"},
2131 {0x02, "HCCA"},
2132 {0x03, "HEMM"},
2133 {0, NULL((void*)0)}
2134};
2135
2136static const value_string qos_up[] = {
2137 {0x00, "Best Effort"},
2138 {0x01, "Background"},
2139 {0x02, "Spare"},
2140 {0x03, "Excellent Effort"},
2141 {0x04, "Controlled Load"},
2142 {0x05, "Video"},
2143 {0x06, "Voice"},
2144 {0x07, "Network Control"},
2145 {0, NULL((void*)0)}
2146};
2147
2148static const value_string classifier_type[] = {
2149 {0x00, "Ethernet parameters"},
2150 {0x01, "TCP/UDP IP parameters"},
2151 {0x02, "IEEE 802.1D/Q parameters"},
2152 {0, NULL((void*)0)}
2153};
2154
2155static const true_false_string ieee80211_block_ack_control_ack_policy_flag = {
2156 "Immediate Acknowledgement Required",
2157 "Sender Does Not Require Immediate Acknowledgement"
2158};
2159
2160static const value_string ieee80211_block_ack_request_type_flags[] = {
2161 {0x00, "Basic Block Ack Request"},
2162 {0x01, "Reserved"},
2163 {0x02, "Compressed Block Ack Request"},
2164 {0x03, "Multi-TID Block Ack Request"},
2165 {0x00, NULL((void*)0)}
2166};
2167
2168static const value_string ieee80211_block_ack_type_flags[] = {
2169 {0x00, "Basic Block Ack"},
2170 {0x01, "Reserved"},
2171 {0x02, "Compressed Block"},
2172 {0x03, "Multi-TID Block"},
2173 {0x00, NULL((void*)0)}
2174};
2175
2176static const value_string ft_action_codes[] = {
2177 {FT_ACTION_REQUEST1, "FT Request"},
2178 {FT_ACTION_RESPONSE2, "FT Response"},
2179 {FT_ACTION_CONFIRM3, "FT Confirm"},
2180 {FT_ACTION_ACK4, "FT Ack"},
2181 {0, NULL((void*)0)}
2182};
2183
2184static const value_string sa_query_action_codes[] = {
2185 {SA_QUERY_REQUEST0, "SA Query Request"},
2186 {SA_QUERY_RESPONSE1, "SA Query Response"},
2187 {0, NULL((void*)0)}
2188};
2189
2190static const value_string ieee80211_data_encap_payload_types[] = {
2191 {1, "Remote Request/Response"},
2192 {2, "TDLS"},
2193 {0, NULL((void*)0)}
2194};
2195
2196static const true_false_string rsn_preauth_flags = {
2197 "Transmitter supports pre-authentication",
2198 "Transmitter does not support pre-authentication"
2199};
2200
2201static const true_false_string rsn_no_pairwise_flags = {
2202 "Transmitter cannot support WEP default key 0 simultaneously with "
2203 "Pairwise key",
2204 "Transmitter can support WEP default key 0 simultaneously with "
2205 "Pairwise key"
2206};
2207
2208static const value_string rsn_cap_replay_counter[] = {
2209 {0x00, "1 replay counter per PTKSA/GTKSA/STAKeySA"},
2210 {0x01, "2 replay counters per PTKSA/GTKSA/STAKeySA"},
2211 {0x02, "4 replay counters per PTKSA/GTKSA/STAKeySA"},
2212 {0x03, "16 replay counters per PTKSA/GTKSA/STAKeySA"},
2213 {0, NULL((void*)0)}
2214};
2215
2216static const true_false_string ht_ldpc_coding_flag = {
2217 "Transmitter supports receiving LDPC coded packets",
2218 "Transmitter does not support receiving LDPC coded packets"
2219};
2220
2221static const true_false_string ht_chan_width_flag = {
2222 "Transmitter supports 20MHz and 40MHz operation",
2223 "Transmitter only supports 20MHz operation"
2224};
2225
2226static const value_string ht_sm_pwsave_flag[] = {
2227 {0x00, "Static SM Power Save mode"},
2228 {0x01, "Dynamic SM Power Save mode"},
2229 {0x02, "Reserved"},
2230 {0x03, "SM Power Save disabled"},
2231 {0x00, NULL((void*)0)}
2232};
2233
2234static const true_false_string ht_green_flag = {
2235 "Transmitter is able to receive PPDUs with Green Field (GF) preamble",
2236 "Transmitter is not able to receive PPDUs with Green Field (GF) preamble"
2237};
2238
2239static const value_string ht_rx_stbc_flag[] = {
2240 {0x00, "No Rx STBC support"},
2241 {0x01, "Rx support of one spatial stream"},
2242 {0x02, "Rx support of one and two spatial streams"},
2243 {0x03, "Rx support of one, two, and three spatial streams"},
2244 {0x00, NULL((void*)0)}
2245};
2246
2247 /* IEEE Stc 802.11ac-2013 8.4.2.29 Extended Capabilities element*/
2248static const value_string vht_max_mpdu_in_amsdu[] = {
2249 {0x00, "No limit"},
2250 {0x01, "32"},
2251 {0x02, "16"},
2252 {0x03, "8"},
2253 {0, NULL((void*)0)}
2254};
2255
2256 /* IEEE Stc 802.11ac/D3.1 */
2257
2258static const value_string vht_max_mpdu_length_flag[] = {
2259 {0x00, "3 895"},
2260 {0x01, "7 991"},
2261 {0x02, "11 454"},
2262 {0x03, "Reserved"},
2263 {0x00, NULL((void*)0)}
2264};
2265
2266static const value_string vht_supported_chan_width_set_flag[] = {
2267 {0x00, "Neither 160MHz nor 80+80 supported"},
2268 {0x01, "160MHz supported"},
2269 {0x02, "160MHz and 80+80 Supported"},
2270 {0x03, "Reserved"},
2271 {0x00, NULL((void*)0)}
2272};
2273
2274static const value_string vht_rx_stbc_flag[] = {
2275 {0x00, "None"},
2276 {0x01, "1 Spatial Stream Supported"},
2277 {0x02, "1 to 2 Spatial Stream Supported"},
2278 {0x03, "1 to 3 Spatial Stream Supported"},
2279 {0x04, "1 to 4 Spatial Stream Supported"},
2280 {0x02, "160MHz and 80+80 Supported"},
2281 {0x05, "Reserved"},
2282 {0x06, "Reserved"},
2283 {0x07, "Reserved"},
2284 {0x00, NULL((void*)0)}
2285};
2286
2287static const value_string num_plus_one_3bit_flag[] = {
2288 {0x00, "1"},
2289 {0x01, "2"},
2290 {0x02, "3"},
2291 {0x03, "4"},
2292 {0x04, "5"},
2293 {0x05, "6"},
2294 {0x06, "7"},
2295 {0x07, "8"},
2296 {0x00, NULL((void*)0)}
2297};
2298
2299static const value_string vht_max_ampdu_flag[] = {
2300 {0x00, "8 191"},
2301 {0x01, "16 383"},
2302 {0x02, "32 767"},
2303 {0x03, "65,535"},
2304 {0x04, "131 071"},
2305 {0x05, "262 143"},
2306 {0x06, "524 287"},
2307 {0x07, "1 048 575"},
2308 {0x00, NULL((void*)0)}
2309};
2310
2311static const value_string vht_link_adapt_flag[] = {
2312 {0x00, "No Feedback"},
2313 {0x01, "Reserved (logically only solicited feedback)"},
2314 {0x02, "Unsolicited feedback only"},
2315 {0x03, "Both (can provide unsolicited feedback and respond to VHT MRQ)"},
2316 {0x00, NULL((void*)0)}
2317};
2318
2319static const value_string vht_supported_mcs_flag[] = {
2320 {0x00, "MCS 0-7"},
2321 {0x01, "MCS 0-8"},
2322 {0x02, "MCS 0-9"},
2323 {0x03, "Not Supported"},
2324 {0x00, NULL((void*)0)}
2325};
2326
2327static const value_string vht_op_channel_width_flag[] = {
2328 {0x00, "20 MHz or 40 MHz"},
2329 {0x01, "80 MHz"},
2330 {0x02, "160 MHz"},
2331 {0x03, "80+80 MHz"},
2332 {0x00, NULL((void*)0)}
2333};
2334
2335static const value_string vht_tpe_pwr_units[] = {
2336 {0x00, "EIRP"},
2337 {0x00, NULL((void*)0)}
2338};
2339
2340static const true_false_string vht_ndp_annc_sta_info_feedback_type = {
2341 "MU feedback requested",
2342 "SU feedback requested"
2343};
2344
2345static const true_false_string ht_delayed_block_ack_flag = {
2346 "Transmitter supports HT-Delayed BlockAck",
2347 "Transmitter does not support HT-Delayed BlockAck"
2348};
2349
2350static const true_false_string ht_max_amsdu_flag = {
2351 "7935 bytes",
2352 "3839 bytes"
2353};
2354
2355static const true_false_string ht_dss_cck_40_flag = {
2356 "Will/Can use DSSS/CCK in 40 MHz",
2357 "Won't/Can't use of DSSS/CCK in 40 MHz"
2358};
2359
2360static const true_false_string ht_psmp_flag = {
2361 "Will/Can support PSMP operation",
2362 "Won't/Can't support PSMP operation"
2363};
2364
2365static const true_false_string ht_40_mhz_intolerant_flag = {
2366 "Use of 40 MHz transmissions restricted/disallowed",
2367 "Use of 40 MHz transmissions unrestricted/allowed"
2368};
2369
2370static const value_string ampduparam_mpdu_start_spacing_flags[] = {
2371 {0x00, "no restriction"},
2372 {0x01, "1/4 [usec]"},
2373 {0x02, "1/2 [usec]"},
2374 {0x03, "1 [usec]"},
2375 {0x04, "2 [usec]"},
2376 {0x05, "4 [usec]"},
2377 {0x06, "8 [usec]"},
2378 {0x07, "16 [usec]"},
2379 {0x00, NULL((void*)0)}
2380};
2381
2382static const true_false_string mcsset_tx_rx_mcs_set_not_equal_flag = {
2383 "Not Equal",
2384 "Equal",
2385};
2386
2387static const value_string mcsset_tx_max_spatial_streams_flags[] = {
2388 {0x00, "1 spatial stream"},
2389 {0x01, "2 spatial streams"},
2390 {0x02, "3 spatial streams"},
2391 {0x03, "4 spatial streams"},
2392 {0x04, "TX MCS Set Not Defined"},
2393 {0x00, NULL((void*)0)}
2394};
2395
2396static const value_string htex_transtime_flags[] = {
2397 {0x00, "No Transition"},
2398 {0x01, "400 usec"},
2399 {0x02, "1.5 msec"},
2400 {0x03, "5 msec"},
2401 {0x00, NULL((void*)0)}
2402};
2403
2404static const value_string htex_mcs_flags[] = {
2405 {0x00, "STA does not provide MCS feedback"},
2406 {0x01, "Reserved"},
2407 {0x02, "STA provides only unsolicited MCS feedback"},
2408 {0x03, "STA can provide MCS feedback in response to MRQ as well as unsolicited MCS feedback"},
2409 {0x00, NULL((void*)0)}
2410};
2411
2412static const value_string txbf_calib_flag[] = {
2413 {0x00, "incapable"},
2414 {0x01, "Limited involvement, cannot initiate"},
2415 {0x02, "Limited involvement, can initiate"},
2416 {0x03, "Fully capable"},
2417 {0x00, NULL((void*)0)}
2418};
2419
2420static const value_string txbf_feedback_flags[] = {
2421 {0x00, "not supported"},
2422 {0x01, "delayed feedback capable"},
2423 {0x02, "immediate feedback capable"},
2424 {0x03, "delayed and immediate feedback capable"},
2425 {0x00, NULL((void*)0)}
2426};
2427
2428static const value_string txbf_antenna_flags[] = {
2429 {0x00, "1 TX antenna sounding"},
2430 {0x01, "2 TX antenna sounding"},
2431 {0x02, "3 TX antenna sounding"},
2432 {0x03, "4 TX antenna sounding"},
2433 {0x00, NULL((void*)0)}
2434};
2435
2436static const value_string txbf_csi_max_rows_bf_flags[] = {
2437 {0x00, "1 row of CSI"},
2438 {0x01, "2 rows of CSI"},
2439 {0x02, "3 rows of CSI"},
2440 {0x03, "4 rows of CSI"},
2441 {0x00, NULL((void*)0)}
2442};
2443
2444static const value_string txbf_chan_est_flags[] = {
2445 {0x00, "1 space time stream"},
2446 {0x01, "2 space time streams"},
2447 {0x02, "3 space time streams"},
2448 {0x03, "4 space time streams"},
2449 {0x00, NULL((void*)0)}
2450};
2451
2452static const value_string txbf_min_group_flags[] = {
2453 {0x00, "No grouping supported"},
2454 {0x01, "Groups of 1, 2 supported"},
2455 {0x02, "Groups of 1, 4 supported"},
2456 {0x03, "Groups of 1, 2, 4 supported"},
2457 {0x00, NULL((void*)0)}
2458};
2459
2460static const value_string hta_ext_chan_offset_flag[] = {
2461 {0x00, "No Extension Channel"},
2462 {0x01, "Extension Channel above control channel"},
2463 {0x02, "Undefined"},
2464 {0x03, "Extension Channel below control channel"},
2465 {0x00, NULL((void*)0)}
2466};
2467
2468static const true_false_string hta_rec_tx_width_flag = {
2469 "Any channel width enabled",
2470 "Use 20MHz channel (control)"
2471};
2472
2473static const true_false_string hta_rifs_mode_flag = {
2474 "Use of RIFS permitted",
2475 "Use of RIFS prohibited"
2476};
2477
2478static const true_false_string hta_controlled_access_flag = {
2479 "Not only PSMP",
2480 "PSMP only"
2481};
2482
2483static const value_string hta_service_interval_flag[] = {
2484 {0x00, "5ms"},
2485 {0x01, "10ms"},
2486 {0x02, "15ms"},
2487 {0x03, "20ms"},
2488 {0x04, "25ms"},
2489 {0x05, "30ms"},
2490 {0x06, "35ms"},
2491 {0x07, "40ms"},
2492 {0x00, NULL((void*)0)}
2493};
2494
2495static const value_string hta_operating_mode_flag[] = {
2496 {0x00, "Pure HT, no protection"},
2497 {0x01, "There may be non-HT devices (control & ext channel)"},
2498 {0x02, "No non-HT is associated, but at least 1 20MHz is. protect on"},
2499 {0x03, "Mixed: no non-HT is associated, protect on"},
2500 {0x00, NULL((void*)0)}
2501};
2502
2503static const true_false_string hta_non_gf_devices_flag = {
2504 "All HT devices associated are GF capable",
2505 "One or More HT devices are not GF capable"
2506};
2507
2508static const true_false_string hta_dual_stbc_protection_flag = {
2509 "Dual CTS protections is used",
2510 "Regular use of RTS/CTS"
2511};
2512
2513static const true_false_string hta_secondary_beacon_flag = {
2514 "Secondary Beacon",
2515 "Primary Beacon"
2516};
2517
2518static const true_false_string hta_lsig_txop_protection_flag = {
2519 "Full Support",
2520 "Not full support"
2521};
2522
2523static const true_false_string hta_pco_active_flag = {
2524 "PCO is activated in the BSS",
2525 "PCO is not activated in the BSS"
2526};
2527
2528static const true_false_string hta_pco_phase_flag = {
2529 "Switch to 20MHz phase/keep 20MHz",
2530 "Switch to 40MHz phase/keep 40MHz"
2531};
2532
2533static const value_string ht_info_secondary_channel_offset_flags[] = {
2534 {0x00, "No secondary channel"},
2535 {0x01, "Secondary channel is above the primary channel"},
2536 {0x02, "Reserved"},
2537 {0x03, "Secondary channel is below the primary channel"},
2538 {0x00, NULL((void*)0)}
2539};
2540
2541static const true_false_string ht_info_channel_width_flag = {
2542 "Channel of any width supported",
2543 "20 MHz channel width only"
2544};
2545
2546static const true_false_string ht_info_rifs_mode_flag = {
2547 "Permitted",
2548 "Prohibited"
2549};
2550
2551static const true_false_string ht_info_psmp_stas_only_flag = {
2552 "Association requests are accepted from only PSMP capable STA",
2553 "Association requests are accepted regardless of PSMP capability"
2554};
2555
2556static const value_string ht_info_service_interval_granularity_flags[] = {
2557 {0x00, "5 ms"},
2558 {0x01, "10 ms"},
2559 {0x02, "15 ms"},
2560 {0x03, "20 ms"},
2561 {0x04, "25 ms"},
2562 {0x05, "30 ms"},
2563 {0x06, "35 ms"},
2564 {0x07, "40 ms"},
2565 {0x00, NULL((void*)0)}
2566};
2567
2568static const value_string ht_info_operating_mode_flags[] = {
2569 {0x00, "All STAs are - 20/40 MHz HT or in a 20/40 MHz BSS or are 20 MHz HT in a 20 MHz BSS"},
2570 {0x01, "HT non-member protection mode"},
2571 {0x02, "Only HT STAs in the BSS, however, there exists at least one 20 MHz STA"},
2572 {0x03, "HT mixed mode"},
2573 {0x00, NULL((void*)0)}
2574};
2575
2576static const true_false_string ht_info_non_greenfield_sta_present_flag = {
2577 "One or more associated STAs are not greenfield capable",
2578 "All associated STAs are greenfield capable"
2579};
2580
2581static const true_false_string ht_info_transmit_burst_limit_flag = {
2582 "2.4 GHz - 6.16 ms | All other bands - 3.08 ms",
2583 "No limit"
2584};
2585
2586static const true_false_string ht_info_obss_non_ht_stas_present_flag = {
2587 "Use of protection for non-HT STAs by overlapping BSSs is needed",
2588 "Use of protection for non-HT STAs by overlapping BSSs is not needed"
2589};
2590
2591static const true_false_string ht_info_dual_beacon_flag = {
2592 "AP transmits a secondary beacon",
2593 "No second beacon is transmitted"
2594};
2595
2596static const true_false_string ht_info_dual_cts_protection_flag = {
2597 "Required",
2598 "Not required"
2599};
2600
2601static const true_false_string ht_info_secondary_beacon_flag = {
2602 "Secondary beacon",
2603 "Primary beacon"
2604};
2605
2606static const true_false_string ht_info_lsig_txop_protection_full_support_flag = {
2607 "All HT STAs in the BSS support L-SIG TXOP protection",
2608 "One or more HT STAs in the BSS do not support L-SIG TXOP protection"
2609};
2610
2611static const true_false_string ht_info_pco_phase_flag = {
2612 "Switch to or continue 40 MHz phase",
2613 "Switch to or continue 20 MHz phase"
2614};
2615
2616static const true_false_string htc_lac_trq_flag = {
2617 "Want sounding PPDU",
2618 "Don't want sounding PPDU"
2619};
2620
2621static const true_false_string htc_lac_mai_mrq_flag = {
2622 "MCS feedback requested",
2623 "No MCS feedback requested"
2624};
2625
2626static const value_string ieee80211_htc_lac_asel_command_flags[] = {
2627 {0x00, "Transmit Antenna Selection Sounding Indication (TXASSI)"},
2628 {0x01, "Transmit Antenna Selection Sounding Request (TXASSR)"},
2629 {0x02, "Receive Antenna Selection Sounding Indication (RXASSI)"},
2630 {0x03, "Receive Antenna Selection Sounding Request (RXASSR)"},
2631 {0x04, "Sounding Label"},
2632 {0x05, "No feedback, ASEL training failure"},
2633 {0x06, "Transmit Antenna Selection Sounding Indication (TXASSI) requesting feedback of explicit CSI"},
2634 {0x07, "Reserved"},
2635 {0x00, NULL((void*)0)}
2636};
2637
2638static const value_string ieee80211_htc_cal_pos_flags[] = {
2639 {0x00, "Not a calibration frame"},
2640 {0x01, "Calibration Start"},
2641 {0x02, "Sounding Response"},
2642 {0x03, "Sounding Complete"},
2643 {0x00, NULL((void*)0)}
2644};
2645
2646static const value_string ieee80211_htc_csi_steering_flags[] = {
2647 {0x00, "No feedback required"},
2648 {0x01, "CSI"},
2649 {0x02, "Non-compressed Beamforming Feedback Matrix"},
2650 {0x03, "Compressed Beamforming Feedback Matrix"},
2651 {0x00, NULL((void*)0)}
2652};
2653
2654static const true_false_string ieee80211_htc_ndp_announcement_flag = {
2655 "NDP will follow",
2656 "No NDP will follow"
2657};
2658
2659static const value_string ieee80211_htc_bw_recommended_vht_mcs_vals[] = {
2660 {0, "20 MHz"},
2661 {1, "40 MHz"},
2662 {2, "80 MHz"},
2663 {3, "160 MHz and 80+80 MHz"},
2664 {0, NULL((void*)0)}
2665};
2666
2667static const value_string ieee80211_htc_coding_type_vals[] = {
2668 {0, "BCC"},
2669 {1, "LDPC"},
2670 {0, NULL((void*)0)}
2671};
2672
2673static const value_string ieee80211_htc_fb_tx_type_vals[] = {
2674 {0, "Not beamformed"},
2675 {1, "Beamformed"},
2676 {0, NULL((void*)0)}
2677};
2678
2679static const value_string ieee80211_tag_secondary_channel_offset_flags[] = {
2680 {0x00, "No Secondary Channel"},
2681 {0x01, "Above Primary Channel"},
2682 {0x02, "Reserved"},
2683 {0x03, "Below Primary Channel"},
2684 {0x00, NULL((void*)0)}
2685};
2686
2687#define BSS_BITMASK_UP00x0001 0x0001
2688#define BSS_BITMASK_UP10x0002 0x0002
2689#define BSS_BITMASK_UP20x0004 0x0004
2690#define BSS_BITMASK_UP30x0008 0x0008
2691#define BSS_BITMASK_UP40x0010 0x0010
2692#define BSS_BITMASK_UP50x0020 0x0020
2693#define BSS_BITMASK_UP60x0040 0x0040
2694#define BSS_BITMASK_UP70x0080 0x0080
2695#define BSS_BITMASK_AC00x0100 0x0100
2696#define BSS_BITMASK_AC10x0200 0x0200
2697#define BSS_BITMASK_AC20x0400 0x0400
2698#define BSS_BITMASK_AC30x0800 0x0800
2699#define BSS_BITMASK_RSV0xF000 0xF000
2700
2701static const value_string ieee80211_tag_ext_channel_switch_announcement_switch_mode_flags[] = {
2702 {0x00, "Frames may be transmitted before the channel switch has been completed"},
2703 {0x01, "No more frames are to be transmitted until the channel switch has been completed"},
2704 {0x00, NULL((void*)0)}
2705};
2706
2707static const value_string service_interval_granularity_vals[] = {
2708 { 0, "5 ms" },
2709 { 1, "10 ms" },
2710 { 2, "15 ms" },
2711 { 3, "20 ms" },
2712 { 4, "25 ms" },
2713 { 5, "30 ms" },
2714 { 6, "35 ms" },
2715 { 7, "40 ms" },
2716 { 0x00, NULL((void*)0) }
2717};
2718
2719static const value_string wep_type_vals[] = {
2720 { AIRPDCAP_KEY_TYPE_WEP0, STRING_KEY_TYPE_WEP"wep" },
2721 { AIRPDCAP_KEY_TYPE_WPA_PWD3, STRING_KEY_TYPE_WPA_PWD"wpa-pwd" },
2722 { AIRPDCAP_KEY_TYPE_WPA_PSK4, STRING_KEY_TYPE_WPA_PSK"wpa-psk" },
2723 { 0x00, NULL((void*)0) }
2724};
2725
2726static const value_string ieee80211_ht_pren_type_vals[] = {
2727 { 51, "HT Capabilities (802.11n D1.10)" },
2728 { 52, "HT Additional Capabilities (802.11n D1.00)" },
2729 { 0, NULL((void*)0) }
2730};
2731
2732static const true_false_string ieee80211_cf_ssw_direction = {
2733 "Transmitted by the beamforming responder",
2734 "Transmitted by the beamforming initiator"
2735};
2736
2737static const value_string bss_type[] = {
2738 {0x0, "Reserved"},
2739 {0x1, "IBSS"},
2740 {0x2, "PBSS"},
2741 {0x3, "Infrastructure BSS"},
2742 {0, NULL((void*)0)}
2743};
2744
2745static const value_string band_id[] = {
2746 {0x0, "TV white spaces"},
2747 {0x1, "Sub-1 GHZ (excluding TV white spaces)"},
2748 {0x2, "2.4 GHZ"},
2749 {0x3, "3.6 GHZ"},
2750 {0x4, "4.9 and 5 GHZ"},
2751 {0x5, "60 GHZ"},
2752 {0, NULL((void*)0)}
2753};
2754
2755static const value_string allocation_type[] = {
2756 {0x0, "SP Allocation"},
2757 {0x4, "CBAP allocation"},
2758 {0, NULL((void*)0)}
2759};
2760
2761static const value_string vht_operation_info_channel_width[] = {
2762 {0x00, "20MHz or 40MHz"},
2763 {0x01, "80MHZ"},
2764 {0x10, "160MHz"},
2765 {0x11, "80MHz+80MHz"},
2766 {0, NULL((void*)0)}
2767};
2768static const value_string operating_mode_field_channel_width[] = {
2769 {0x00, "20MHz"},
2770 {0x01, "40MHZ"},
2771 {0x02, "80MHz"},
2772 {0x03, "160MHz or 80MHz+80MHz"},
2773 {0, NULL((void*)0)}
2774};
2775
2776static const value_string operat_mode_field_rxnss[] = {
2777 {0x0, "1Nss"},
2778 {0x1, "2Nss"},
2779 {0x2, "3Nss"},
2780 {0x3, "4Nss"},
2781 {0x4, "5Nss"},
2782 {0x5, "6Nss"},
2783 {0x6, "7Nss"},
2784 {0x7, "8Nss"},
2785 {0, NULL((void*)0)}
2786};
2787
2788#define VHT_ACT_VHT_COMPRESSED_BEAMFORMING0 0
2789#define VHT_ACT_GROUP_ID_MANAGEMENT1 1
2790#define VHT_ACT_OPERATION_MODE_NOTIFICATION2 2
2791
2792static const value_string vht_action_vals[] = {
2793 {VHT_ACT_VHT_COMPRESSED_BEAMFORMING0, "VHT Compressed Beamforming"},
2794 {VHT_ACT_GROUP_ID_MANAGEMENT1, "Group ID Management"},
2795 {VHT_ACT_OPERATION_MODE_NOTIFICATION2, "Operating Mode Notification"},
2796 {0, NULL((void*)0)}
2797};
2798
2799static const value_string ff_vht_mimo_cntrl_nc_index_vals[] = {
2800 {0x00, "1 Column"},
2801 {0x01, "2 Columns"},
2802 {0x02, "3 Columns"},
2803 {0x03, "4 Columns"},
2804 {0x04, "5 Columns"},
2805 {0x05, "6 Columns"},
2806 {0x06, "7 Columns"},
2807 {0x07, "8 Columns"},
2808 {0, NULL((void*)0)}
2809};
2810
2811static const value_string ff_vht_mimo_cntrl_nr_index_vals[] = {
2812 {0x00, "1 Row"},
2813 {0x01, "2 Rows"},
2814 {0x02, "3 Rows"},
2815 {0x03, "4 Rows"},
2816 {0x04, "5 Rows"},
2817 {0x05, "6 Rows"},
2818 {0x06, "7 Rows"},
2819 {0x07, "8 Rows"},
2820 {0, NULL((void*)0)}
2821};
2822
2823static const value_string ff_vht_mimo_cntrl_channel_width_vals[] = {
2824 {0x00, "20 MHz"},
2825 {0x01, "40 MHz"},
2826 {0x02, "80 MHz"},
2827 {0x03, "160 MHz / 80+80 Mhz"},
2828 {0, NULL((void*)0)}
2829};
2830
2831static const value_string ff_vht_mimo_cntrl_grouping_vals[] = {
2832 {0x00, "1 (No Grouping)"},
2833 {0x01, "2"},
2834 {0x02, "4"},
2835 {0x03, "Reserved"},
2836 {0, NULL((void*)0)}
2837};
2838
2839static const value_string ff_vht_mimo_cntrl_feedback_vals[] = {
2840 {0x00, "SU"},
2841 {0x01, "MU"},
2842 {0, NULL((void*)0)}
2843};
2844
2845
2846static int proto_wlan = -1;
2847static int proto_centrino = -1;
2848static int proto_aggregate = -1;
2849static gboolean ieee80211_tvb_invalid = FALSE(0);
2850
2851/* ************************************************************************* */
2852/* Header field info values for FC-field */
2853/* ************************************************************************* */
2854static int hf_ieee80211_fc_field = -1;
2855static int hf_ieee80211_fc_proto_version = -1;
2856static int hf_ieee80211_fc_frame_type = -1;
2857static int hf_ieee80211_fc_frame_subtype = -1;
2858static int hf_ieee80211_fc_frame_extension = -1;
2859static int hf_ieee80211_fc_frame_type_subtype = -1;
2860
2861static int hf_ieee80211_fc_flags = -1;
2862static int hf_ieee80211_fc_to_ds = -1;
2863static int hf_ieee80211_fc_from_ds = -1;
2864static int hf_ieee80211_fc_data_ds = -1;
2865
2866static int hf_ieee80211_fc_more_frag = -1;
2867static int hf_ieee80211_fc_retry = -1;
2868static int hf_ieee80211_fc_pwr_mgt = -1;
2869static int hf_ieee80211_fc_more_data = -1;
2870static int hf_ieee80211_fc_protected = -1;
2871static int hf_ieee80211_fc_order = -1;
2872
2873typedef struct retransmit_key {
2874 guint8 bssid[6];
2875 guint8 src[6];
2876 guint16 seq_control;
2877 guint fnum;
2878} retransmit_key;
2879
2880static GHashTable *fc_analyse_retransmit_table = NULL((void*)0);
2881static GHashTable *fc_first_frame_table = NULL((void*)0);
2882
2883static int hf_ieee80211_fc_analysis_retransmission = -1;
2884static int hf_ieee80211_fc_analysis_retransmission_frame = -1;
2885
2886/* ************************************************************************* */
2887/* Header values for Duration/ID field */
2888/* ************************************************************************* */
2889static int hf_ieee80211_did_duration = -1;
2890static int hf_ieee80211_assoc_id = -1;
2891
2892/* ************************************************************************* */
2893/* Header values for different address-fields (all 4 of them) */
2894/* ************************************************************************* */
2895static int hf_ieee80211_addr_da = -1; /* Destination address subfield */
2896static int hf_ieee80211_addr_da_resolved = -1; /* Dst addr subfield resolved*/
2897static int hf_ieee80211_addr_sa = -1; /* Source address subfield */
2898static int hf_ieee80211_addr_sa_resolved = -1; /* Src addr subfield resolved*/
2899static int hf_ieee80211_addr_ra = -1; /* Receiver address subfield */
2900static int hf_ieee80211_addr_ra_resolved = -1; /* Rcv addr subfield resolved*/
2901static int hf_ieee80211_addr_ta = -1; /* Transmitter address subfield */
2902static int hf_ieee80211_addr_ta_resolved = -1; /* Txm addr subfield resolved*/
2903static int hf_ieee80211_addr_bssid = -1; /* address is bssid */
2904static int hf_ieee80211_addr_bssid_resolved = -1; /* bssid resolved*/
2905static int hf_ieee80211_addr_staa = -1; /* address is station address */
2906static int hf_ieee80211_addr_staa_resolved = -1; /* station address resolved*/
2907
2908static int hf_ieee80211_addr = -1; /* Source or destination address subfield */
2909static int hf_ieee80211_addr_resolved = -1;/*Src/dst address subfield resolved*/
2910
2911/* ************************************************************************* */
2912/* Header values for QoS control field */
2913/* ************************************************************************* */
2914static int hf_ieee80211_qos = -1;
2915static int hf_ieee80211_qos_tid = -1;
2916static int hf_ieee80211_qos_priority = -1;
2917static int hf_ieee80211_qos_ack_policy = -1;
2918static int hf_ieee80211_qos_amsdu_present = -1;
2919static int hf_ieee80211_qos_eosp = -1;
2920static int hf_ieee80211_qos_bit4 = -1;
2921static int hf_ieee80211_qos_txop_limit = -1;
2922static int hf_ieee80211_qos_ps_buf_state = -1;
2923static int hf_ieee80211_qos_buf_state_indicated = -1;
2924static int hf_ieee80211_qos_highest_pri_buf_ac = -1;
2925static int hf_ieee80211_qos_qap_buf_load = -1;
2926static int hf_ieee80211_qos_txop_dur_req = -1;
2927static int hf_ieee80211_qos_queue_size = -1;
2928
2929/* ************************************************************************* */
2930/* Header values for HT control field (+HTC) */
2931/* ************************************************************************* */
2932/* 802.11-2012 and 802.11ac-2013 8.2.4.6 */
2933static int hf_ieee80211_htc = -1;
2934static int hf_ieee80211_htc_vht = -1;
2935static int hf_ieee80211_htc_lac = -1;
2936static int hf_ieee80211_htc_lac_trq = -1;
2937static int hf_ieee80211_htc_lac_mai_aseli = -1;
2938static int hf_ieee80211_htc_lac_mai_mrq = -1;
2939static int hf_ieee80211_htc_lac_mai_msi = -1;
2940static int hf_ieee80211_htc_lac_mai_reserved = -1;
2941static int hf_ieee80211_htc_lac_mfsi = -1;
2942static int hf_ieee80211_htc_lac_mfb = -1;
2943static int hf_ieee80211_htc_lac_asel_command = -1;
2944static int hf_ieee80211_htc_lac_asel_data = -1;
2945static int hf_ieee80211_htc_cal_pos = -1;
2946static int hf_ieee80211_htc_cal_seq = -1;
2947static int hf_ieee80211_htc_reserved1 = -1;
2948static int hf_ieee80211_htc_csi_steering = -1;
2949static int hf_ieee80211_htc_ndp_announcement = -1;
2950static int hf_ieee80211_htc_reserved2 = -1;
2951static int hf_ieee80211_htc_mrq = -1;
2952static int hf_ieee80211_htc_msi = -1;
2953static int hf_ieee80211_htc_msi_stbc_reserved = -1;
2954static int hf_ieee80211_htc_compressed_msi = -1;
2955static int hf_ieee80211_htc_ppdu_stbc_encoded = -1;
2956static int hf_ieee80211_htc_mfsi = -1;
2957static int hf_ieee80211_htc_gid_l = -1;
2958static int hf_ieee80211_htc_mfb = -1;
2959static int hf_ieee80211_htc_num_sts = -1;
2960static int hf_ieee80211_htc_vht_mcs = -1;
2961static int hf_ieee80211_htc_bw = -1;
2962static int hf_ieee80211_htc_snr = -1;
2963static int hf_ieee80211_htc_reserved3 = -1;
2964static int hf_ieee80211_htc_gid_h = -1;
2965static int hf_ieee80211_htc_coding_type = -1;
2966static int hf_ieee80211_htc_fb_tx_type = -1;
2967static int hf_ieee80211_htc_unsolicited_mfb = -1;
2968static int hf_ieee80211_htc_ac_constraint = -1;
2969static int hf_ieee80211_htc_rdg_more_ppdu = -1;
2970
2971/* ************************************************************************* */
2972/* Header values for sequence number field */
2973/* ************************************************************************* */
2974static int hf_ieee80211_frag_number = -1;
2975static int hf_ieee80211_seq_number = -1;
2976
2977/* ************************************************************************* */
2978/* Header values for Frame Check field */
2979/* ************************************************************************* */
2980static int hf_ieee80211_fcs = -1;
2981static int hf_ieee80211_fcs_status = -1;
2982
2983/* ************************************************************************* */
2984/* Header values for reassembly */
2985/* ************************************************************************* */
2986static int hf_ieee80211_fragments = -1;
2987static int hf_ieee80211_fragment = -1;
2988static int hf_ieee80211_fragment_overlap = -1;
2989static int hf_ieee80211_fragment_overlap_conflict = -1;
2990static int hf_ieee80211_fragment_multiple_tails = -1;
2991static int hf_ieee80211_fragment_too_long_fragment = -1;
2992static int hf_ieee80211_fragment_error = -1;
2993static int hf_ieee80211_fragment_count = -1;
2994static int hf_ieee80211_reassembled_in = -1;
2995static int hf_ieee80211_reassembled_length = -1;
2996
2997static int proto_wlan_mgt = -1;
2998static int proto_wlan_ext = -1;
2999
3000/* ************************************************************************* */
3001/* Fixed fields found in mgt frames */
3002/* ************************************************************************* */
3003static int hf_ieee80211_fixed_parameters = -1; /* Protocol payload for management frames */
3004
3005static int hf_ieee80211_ff_auth_alg = -1; /* Authentication algorithm field */
3006static int hf_ieee80211_ff_auth_seq = -1; /* Authentication transaction sequence */
3007static int hf_ieee80211_ff_current_ap = -1; /* Current AP MAC address */
3008static int hf_ieee80211_ff_listen_ival = -1; /* Listen interval fixed field */
3009static int hf_ieee80211_ff_timestamp = -1; /* 64 bit timestamp */
3010static int hf_ieee80211_ff_beacon_interval = -1; /* 16 bit Beacon interval */
3011static int hf_ieee80211_ff_assoc_id = -1; /* 16 bit AID field */
3012static int hf_ieee80211_ff_reason = -1; /* 16 bit reason code */
3013static int hf_ieee80211_ff_status_code = -1; /* Status code */
3014static int hf_ieee80211_ff_category_code = -1; /* 8 bit Category code */
3015static int hf_ieee80211_ff_action_code = -1; /* 8 bit Action code */
3016static int hf_ieee80211_ff_dialog_token = -1; /* 8 bit Dialog token */
3017static int hf_ieee80211_ff_followup_dialog_token = -1;
3018static int hf_ieee80211_ff_wme_action_code = -1; /* Management notification action code */
3019static int hf_ieee80211_ff_wme_status_code = -1; /* Management notification setup response status code */
3020static int hf_ieee80211_ff_qos_action_code = -1;
3021static int hf_ieee80211_ff_dls_action_code = -1;
3022static int hf_ieee80211_ff_dst_mac_addr = -1; /* DLS destination MAC addressi */
3023static int hf_ieee80211_ff_src_mac_addr = -1; /* DLS source MAC addressi */
3024static int hf_ieee80211_ff_req_ap_addr = -1;
3025static int hf_ieee80211_ff_res_ap_addr = -1;
3026static int hf_ieee80211_ff_check_beacon = -1;
3027static int hf_ieee80211_ff_dls_timeout = -1; /* DLS timeout value */
3028static int hf_ieee80211_ff_ft_action_code = -1; /* 8 bit FT Action code */
3029static int hf_ieee80211_ff_sta_address = -1;
3030static int hf_ieee80211_ff_target_ap_address = -1;
3031static int hf_ieee80211_ff_gas_comeback_delay = -1;
3032static int hf_ieee80211_ff_gas_fragment_id = -1;
3033static int hf_ieee80211_ff_more_gas_fragments = -1;
3034static int hf_ieee80211_ff_query_request_length = -1;
3035static int hf_ieee80211_ff_query_request = -1;
3036static int hf_ieee80211_ff_query_response_length = -1;
3037static int hf_ieee80211_ff_query_response = -1;
3038static int hf_ieee80211_ff_anqp_info_id = -1;
3039static int hf_ieee80211_ff_anqp_info_length = -1;
3040static int hf_ieee80211_ff_anqp_info = -1;
3041static int hf_ieee80211_ff_anqp_query_id = -1;
3042static int hf_ieee80211_ff_anqp_capability = -1;
3043static int hf_ieee80211_ff_anqp_capability_vlen = -1;
3044static int hf_ieee80211_ff_anqp_capability_vendor = -1;
3045static int hf_ieee80211_ff_venue_info_group = -1;
3046static int hf_ieee80211_ff_venue_info_type = -1;
3047static int hf_ieee80211_ff_anqp_venue_length = -1;
3048static int hf_ieee80211_ff_anqp_venue_language = -1;
3049static int hf_ieee80211_ff_anqp_venue_name = -1;
3050static int hf_ieee80211_ff_anqp_nw_auth_type_indicator = -1;
3051static int hf_ieee80211_ff_anqp_nw_auth_type_url_len = -1;
3052static int hf_ieee80211_ff_anqp_nw_auth_type_url = -1;
3053static int hf_ieee80211_ff_anqp_roaming_consortium_oi_len = -1;
3054static int hf_ieee80211_ff_anqp_roaming_consortium_oi = -1;
3055static int hf_ieee80211_ff_anqp_ip_addr_avail_ipv6 = -1;
3056static int hf_ieee80211_ff_anqp_ip_addr_avail_ipv4 = -1;
3057static int hf_ieee80211_ff_anqp_nai_realm_count = -1;
3058static int hf_ieee80211_ff_anqp_nai_field_len = -1;
3059static int hf_ieee80211_ff_anqp_nai_realm_encoding = -1;
3060static int hf_ieee80211_ff_anqp_nai_realm_length = -1;
3061static int hf_ieee80211_ff_anqp_nai_realm = -1;
3062static int hf_ieee80211_ff_anqp_nai_realm_eap_count = -1;
3063static int hf_ieee80211_ff_anqp_nai_realm_eap_len = -1;
3064static int hf_ieee80211_ff_anqp_nai_realm_eap_method = -1;
3065static int hf_ieee80211_ff_anqp_nai_realm_auth_param_count = -1;
3066static int hf_ieee80211_ff_anqp_nai_realm_auth_param_id = -1;
3067static int hf_ieee80211_ff_anqp_nai_realm_auth_param_len = -1;
3068static int hf_ieee80211_ff_anqp_nai_realm_auth_param_value = -1;
3069static int hf_ieee80211_3gpp_gc_gud = -1;
3070static int hf_ieee80211_3gpp_gc_udhl = -1;
3071static int hf_ieee80211_3gpp_gc_iei = -1;
3072static int hf_ieee80211_3gpp_gc_num_plmns = -1;
3073static int hf_ieee80211_3gpp_gc_plmn_len = -1;
3074static int hf_ieee80211_ff_anqp_domain_name_len = -1;
3075static int hf_ieee80211_ff_anqp_domain_name = -1;
3076static int hf_ieee80211_ff_tdls_action_code = -1;
3077static int hf_ieee80211_ff_target_channel = -1;
3078static int hf_ieee80211_ff_operating_class = -1;
3079static int hf_ieee80211_ff_wnm_action_code = -1;
3080static int hf_ieee80211_ff_unprotected_wnm_action_code = -1;
3081static int hf_ieee80211_ff_key_data_length = -1;
3082static int hf_ieee80211_ff_key_data = -1;
3083static int hf_ieee80211_ff_wnm_notification_type = -1;
3084static int hf_ieee80211_ff_rm_action_code = -1;
3085static int hf_ieee80211_ff_rm_dialog_token = -1;
3086static int hf_ieee80211_ff_rm_repetitions = -1;
3087static int hf_ieee80211_ff_rm_tx_power = -1;
3088static int hf_ieee80211_ff_rm_max_tx_power = -1;
3089static int hf_ieee80211_ff_tpc = -1;
3090static int hf_ieee80211_ff_tpc_element_id = -1;
3091static int hf_ieee80211_ff_tpc_length = -1;
3092static int hf_ieee80211_ff_tpc_tx_power = -1;
3093static int hf_ieee80211_ff_tpc_link_margin = -1;
3094static int hf_ieee80211_ff_rm_rx_antenna_id = -1;
3095static int hf_ieee80211_ff_rm_tx_antenna_id = -1;
3096static int hf_ieee80211_ff_rm_rcpi = -1;
3097static int hf_ieee80211_ff_rm_rsni = -1;
3098static int hf_ieee80211_ff_request_mode_pref_cand = -1;
3099static int hf_ieee80211_ff_request_mode_abridged = -1;
3100static int hf_ieee80211_ff_request_mode_disassoc_imminent = -1;
3101static int hf_ieee80211_ff_request_mode_bss_term_included = -1;
3102static int hf_ieee80211_ff_request_mode_ess_disassoc_imminent = -1;
3103static int hf_ieee80211_ff_disassoc_timer = -1;
3104static int hf_ieee80211_ff_validity_interval = -1;
3105static int hf_ieee80211_ff_bss_termination_duration = -1;
3106static int hf_ieee80211_ff_url_len = -1;
3107static int hf_ieee80211_ff_url = -1;
3108static int hf_ieee80211_ff_target_bss = -1;
3109static int hf_ieee80211_ff_bss_transition_status_code = -1;
3110static int hf_ieee80211_ff_bss_termination_delay = -1;
3111static int hf_ieee80211_ff_bss_transition_candidate_list_entries = -1;
3112
3113static int hf_ieee80211_ff_sa_query_action_code = -1;
3114static int hf_ieee80211_ff_transaction_id = -1;
3115
3116/* Vendor specific */
3117static int hf_ieee80211_ff_marvell_action_type = -1;
3118static int hf_ieee80211_ff_marvell_mesh_mgt_action_code = -1;
3119static int hf_ieee80211_ff_marvell_mesh_mgt_length = -1; /* Mesh Management length */
3120static int hf_ieee80211_ff_marvell_mesh_mgt_mode = -1; /* Mesh Management mode */
3121static int hf_ieee80211_ff_marvell_mesh_mgt_ttl = -1; /* Mesh Management TTL */
3122static int hf_ieee80211_ff_marvell_mesh_mgt_dstcount = -1; /* Mesh Management dst count */
3123static int hf_ieee80211_ff_marvell_mesh_mgt_hopcount = -1; /* Mesh Management hop count */
3124static int hf_ieee80211_ff_marvell_mesh_mgt_rreqid = -1; /* Mesh Management RREQ ID */
3125static int hf_ieee80211_ff_marvell_mesh_mgt_sa = -1; /* Mesh Management src addr */
3126static int hf_ieee80211_ff_marvell_mesh_mgt_ssn = -1; /* Mesh Management src sequence number */
3127static int hf_ieee80211_ff_marvell_mesh_mgt_metric = -1; /* Mesh Management metric */
3128static int hf_ieee80211_ff_marvell_mesh_mgt_flags = -1; /* Mesh Management RREQ flags */
3129static int hf_ieee80211_ff_marvell_mesh_mgt_da = -1; /* Mesh Management dst addr */
3130static int hf_ieee80211_ff_marvell_mesh_mgt_dsn = -1; /* Mesh Management dst sequence number */
3131static int hf_ieee80211_ff_marvell_mesh_mgt_lifetime = -1; /* Mesh Management lifetime */
3132
3133
3134static int hf_ieee80211_ff_ba_action = -1;
3135
3136static int hf_ieee80211_ff_block_ack_params = -1;
3137static int hf_ieee80211_ff_block_ack_params_amsdu_permitted = -1;
3138static int hf_ieee80211_ff_block_ack_params_policy = -1;
3139static int hf_ieee80211_ff_block_ack_params_tid = -1;
3140static int hf_ieee80211_ff_block_ack_params_buffer_size = -1;
3141
3142static const int *ieee80211_ff_block_ack_params_fields[] = {
3143 &hf_ieee80211_ff_block_ack_params_amsdu_permitted,
3144 &hf_ieee80211_ff_block_ack_params_policy,
3145 &hf_ieee80211_ff_block_ack_params_tid,
3146 &hf_ieee80211_ff_block_ack_params_buffer_size,
3147 NULL((void*)0)
3148};
3149
3150static int hf_ieee80211_ff_block_ack_timeout = -1;
3151
3152static int hf_ieee80211_ff_block_ack_ssc = -1;
3153static int hf_ieee80211_ff_block_ack_ssc_fragment = -1;
3154static int hf_ieee80211_ff_block_ack_ssc_sequence = -1;
3155
3156static const int *ieee80211_ff_block_ack_ssc_fields[] = {
3157 &hf_ieee80211_ff_block_ack_ssc_fragment,
3158 &hf_ieee80211_ff_block_ack_ssc_sequence,
3159 NULL((void*)0)
3160};
3161
3162static int hf_ieee80211_ff_delba_param = -1;
3163static int hf_ieee80211_ff_delba_param_reserved = -1;
3164static int hf_ieee80211_ff_delba_param_init = -1;
3165static int hf_ieee80211_ff_delba_param_tid = -1;
3166
3167static const int *ieee80211_ff_delba_param_fields[] = {
3168 &hf_ieee80211_ff_delba_param_reserved,
3169 &hf_ieee80211_ff_delba_param_init,
3170 &hf_ieee80211_ff_delba_param_tid,
3171 NULL((void*)0)
3172};
3173
3174static int hf_ieee80211_ff_max_reg_pwr = -1;
3175static int hf_ieee80211_ff_measurement_pilot_int = -1;
3176static int hf_ieee80211_ff_country_str = -1;
3177static int hf_ieee80211_ff_max_tx_pwr = -1;
3178static int hf_ieee80211_ff_tx_pwr_used = -1;
3179static int hf_ieee80211_ff_transceiver_noise_floor = -1;
3180static int hf_ieee80211_ff_channel_width = -1;
3181
3182static int hf_ieee80211_ff_qos_info_ap = -1;
3183static int hf_ieee80211_ff_qos_info_ap_edca_param_set_counter = -1;
3184static int hf_ieee80211_ff_qos_info_ap_q_ack = -1;
3185static int hf_ieee80211_ff_qos_info_ap_queue_req = -1;
3186static int hf_ieee80211_ff_qos_info_ap_txop_request = -1;
3187static int hf_ieee80211_ff_qos_info_ap_reserved = -1;
3188
3189static const int *ieee80211_ff_qos_info_ap_fields[] = {
3190 &hf_ieee80211_ff_qos_info_ap_edca_param_set_counter,
3191 &hf_ieee80211_ff_qos_info_ap_q_ack,
3192 &hf_ieee80211_ff_qos_info_ap_queue_req,
3193 &hf_ieee80211_ff_qos_info_ap_txop_request,
3194 &hf_ieee80211_ff_qos_info_ap_reserved,
3195 NULL((void*)0)
3196};
3197
3198static int hf_ieee80211_ff_qos_info_sta = -1;
3199static int hf_ieee80211_ff_qos_info_sta_ac_vo = -1;
3200static int hf_ieee80211_ff_qos_info_sta_ac_vi = -1;
3201static int hf_ieee80211_ff_qos_info_sta_ac_bk = -1;
3202static int hf_ieee80211_ff_qos_info_sta_ac_be = -1;
3203static int hf_ieee80211_ff_qos_info_sta_q_ack = -1;
3204static int hf_ieee80211_ff_qos_info_sta_max_sp_length = -1;
3205static int hf_ieee80211_ff_qos_info_sta_more_data_ack = -1;
3206
3207static const int *ieee80211_ff_qos_info_sta_fields[] = {
3208 &hf_ieee80211_ff_qos_info_sta_ac_vo,
3209 &hf_ieee80211_ff_qos_info_sta_ac_vi,
3210 &hf_ieee80211_ff_qos_info_sta_ac_bk,
3211 &hf_ieee80211_ff_qos_info_sta_ac_be,
3212 &hf_ieee80211_ff_qos_info_sta_q_ack,
3213 &hf_ieee80211_ff_qos_info_sta_max_sp_length,
3214 &hf_ieee80211_ff_qos_info_sta_more_data_ack,
3215 NULL((void*)0)
3216};
3217
3218static int hf_ieee80211_ff_sm_pwr_save = -1;
3219static int hf_ieee80211_ff_sm_pwr_save_enabled = -1;
3220static int hf_ieee80211_ff_sm_pwr_save_sm_mode = -1;
3221static int hf_ieee80211_ff_sm_pwr_save_reserved = -1;
3222
3223static const int *ieee80211_ff_sw_pwr_save_fields[] = {
3224 &hf_ieee80211_ff_sm_pwr_save_enabled,
3225 &hf_ieee80211_ff_sm_pwr_save_sm_mode,
3226 &hf_ieee80211_ff_sm_pwr_save_reserved,
3227 NULL((void*)0)
3228};
3229
3230static int hf_ieee80211_ff_pco_phase_cntrl = -1;
3231
3232static int hf_ieee80211_ff_psmp_param_set = -1;
3233static int hf_ieee80211_ff_psmp_param_set_n_sta = -1;
3234static int hf_ieee80211_ff_psmp_param_set_more_psmp = -1;
3235static int hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration = -1;
3236
3237static const int *ieee80211_ff_psmp_param_set_fields[] = {
3238 &hf_ieee80211_ff_psmp_param_set_n_sta,
3239 &hf_ieee80211_ff_psmp_param_set_more_psmp,
3240 &hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration,
3241 NULL((void*)0)
3242};
3243
3244static int hf_ieee80211_ff_mimo_cntrl = -1;
3245static int hf_ieee80211_ff_mimo_cntrl_nc_index = -1;
3246static int hf_ieee80211_ff_mimo_cntrl_nr_index = -1;
3247static int hf_ieee80211_ff_mimo_cntrl_channel_width = -1;
3248static int hf_ieee80211_ff_mimo_cntrl_grouping = -1;
3249static int hf_ieee80211_ff_mimo_cntrl_coefficient_size = -1;
3250static int hf_ieee80211_ff_mimo_cntrl_codebook_info = -1;
3251static int hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment = -1;
3252static int hf_ieee80211_ff_mimo_cntrl_reserved = -1;
3253static int hf_ieee80211_ff_mimo_cntrl_sounding_timestamp = -1;
3254
3255static int hf_ieee80211_ff_ant_selection = -1;
3256static int hf_ieee80211_ff_ant_selection_0 = -1;
3257static int hf_ieee80211_ff_ant_selection_1 = -1;
3258static int hf_ieee80211_ff_ant_selection_2 = -1;
3259static int hf_ieee80211_ff_ant_selection_3 = -1;
3260static int hf_ieee80211_ff_ant_selection_4 = -1;
3261static int hf_ieee80211_ff_ant_selection_5 = -1;
3262static int hf_ieee80211_ff_ant_selection_6 = -1;
3263static int hf_ieee80211_ff_ant_selection_7 = -1;
3264
3265static const int *ieee80211_ff_ant_selection_fields[] = {
3266 &hf_ieee80211_ff_ant_selection_0,
3267 &hf_ieee80211_ff_ant_selection_1,
3268 &hf_ieee80211_ff_ant_selection_2,
3269 &hf_ieee80211_ff_ant_selection_3,
3270 &hf_ieee80211_ff_ant_selection_4,
3271 &hf_ieee80211_ff_ant_selection_5,
3272 &hf_ieee80211_ff_ant_selection_6,
3273 &hf_ieee80211_ff_ant_selection_7,
3274 NULL((void*)0)
3275};
3276
3277static int hf_ieee80211_ff_ext_channel_switch_announcement = -1;
3278static int hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode = -1;
3279static int hf_ieee80211_ff_ext_channel_switch_announcement_new_ope_class = -1;
3280static int hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number = -1;
3281static int hf_ieee80211_ff_ext_channel_switch_announcement_switch_count = -1;
3282
3283static const int *ieee80211_ff_ext_channel_switch_announcement_fields[] = {
3284 &hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode,
3285 &hf_ieee80211_ff_ext_channel_switch_announcement_new_ope_class,
3286 &hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number,
3287 &hf_ieee80211_ff_ext_channel_switch_announcement_switch_count,
3288 NULL((void*)0)
3289};
3290
3291static int hf_ieee80211_ff_ht_info = -1;
3292static int hf_ieee80211_ff_ht_info_information_request = -1;
3293static int hf_ieee80211_ff_ht_info_40_mhz_intolerant = -1;
3294static int hf_ieee80211_ff_ht_info_sta_chan_width = -1;
3295static int hf_ieee80211_ff_ht_info_reserved = -1;
3296
3297static const int *ieee80211_ff_ht_info_fields[] = {
3298 &hf_ieee80211_ff_ht_info_information_request,
3299 &hf_ieee80211_ff_ht_info_40_mhz_intolerant,
3300 &hf_ieee80211_ff_ht_info_sta_chan_width,
3301 &hf_ieee80211_ff_ht_info_reserved,
3302 NULL((void*)0)
3303};
3304
3305static int hf_ieee80211_ff_ht_action = -1;
3306
3307static int hf_ieee80211_ff_psmp_sta_info = -1;
3308static int hf_ieee80211_ff_psmp_sta_info_type = -1;
3309static int hf_ieee80211_ff_psmp_sta_info_dtt_start_offset = -1;
3310static int hf_ieee80211_ff_psmp_sta_info_dtt_duration = -1;
3311static int hf_ieee80211_ff_psmp_sta_info_sta_id = -1;
3312static int hf_ieee80211_ff_psmp_sta_info_utt_start_offset = -1;
3313static int hf_ieee80211_ff_psmp_sta_info_utt_duration = -1;
3314static int hf_ieee80211_ff_psmp_sta_info_reserved_small= -1;
3315static int hf_ieee80211_ff_psmp_sta_info_reserved_large = -1;
3316static int hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id = -1;
3317
3318static int hf_ieee80211_ff_mimo_csi_snr = -1;
3319static int hf_ieee80211_ff_mimo_csi_matrices = -1;
3320static int hf_ieee80211_ff_mimo_csi_bf_matrices = -1;
3321static int hf_ieee80211_ff_mimo_csi_cbf_matrices = -1;
3322
3323/*** Begin: 802.11s additions ***/
3324static int hf_ieee80211_mesh_control_field = -1;
3325
3326static int hf_ieee80211_ff_mesh_action = -1;
3327static int hf_ieee80211_ff_multihop_action = -1;
3328static int hf_ieee80211_ff_mesh_flags = -1;
3329static int hf_ieee80211_ff_mesh_ttl = -1;
3330static int hf_ieee80211_ff_mesh_sequence = -1;
3331static int hf_ieee80211_ff_mesh_addr4 = -1;
3332static int hf_ieee80211_ff_mesh_addr5 = -1;
3333static int hf_ieee80211_ff_mesh_addr6 = -1;
3334static int hf_ieee80211_ff_selfprot_action = -1;
3335
3336static int hf_ieee80211_mesh_peering_proto = -1;
3337static int hf_ieee80211_mesh_peering_local_link_id = -1;
3338static int hf_ieee80211_mesh_peering_peer_link_id = -1;
3339
3340static int hf_ieee80211_ff_hwmp_flags = -1;
3341static int hf_ieee80211_ff_hwmp_hopcount = -1;
3342static int hf_ieee80211_ff_hwmp_ttl = -1;
3343static int hf_ieee80211_ff_hwmp_pdid = -1;
3344static int hf_ieee80211_ff_hwmp_orig_sta = -1;
3345static int hf_ieee80211_ff_hwmp_orig_sn = -1;
3346static int hf_ieee80211_ff_hwmp_orig_ext = -1;
3347static int hf_ieee80211_ff_hwmp_lifetime = -1;
3348static int hf_ieee80211_ff_hwmp_metric = -1;
3349static int hf_ieee80211_ff_hwmp_targ_count = -1;
3350static int hf_ieee80211_ff_hwmp_targ_flags = -1;
3351static int hf_ieee80211_ff_hwmp_targ_to_flags = -1;
3352static int hf_ieee80211_ff_hwmp_targ_usn_flags = -1;
3353static int hf_ieee80211_ff_hwmp_targ_sta = -1;
3354static int hf_ieee80211_ff_hwmp_targ_sn = -1;
3355static int hf_ieee80211_ff_hwmp_targ_ext = -1;
3356static int hf_ieee80211_rann_flags = -1;
3357static int hf_ieee80211_rann_root_sta = -1;
3358static int hf_ieee80211_rann_sn = -1;
3359static int hf_ieee80211_rann_interval = -1;
3360
3361static int hf_ieee80211_mesh_channel_switch_ttl = -1;
3362static int hf_ieee80211_mesh_channel_switch_flag = -1;
3363static int hf_ieee80211_mesh_channel_switch_reason_code = -1;
3364static int hf_ieee80211_mesh_channel_switch_precedence_value = -1;
3365static int hf_ieee80211_mesh_chswitch_flag_txrestrict = -1;
3366static int hf_ieee80211_mesh_chswitch_flag_initiator = -1;
3367
3368static int hf_ieee80211_mesh_config_path_sel_protocol = -1;
3369static int hf_ieee80211_mesh_config_path_sel_metric = -1;
3370static int hf_ieee80211_mesh_config_congestion_control = -1;
3371static int hf_ieee80211_mesh_config_sync_method = -1;
3372static int hf_ieee80211_mesh_config_auth_protocol = -1;
3373static int hf_ieee80211_mesh_config_formation_info = -1;
3374static int hf_ieee80211_mesh_config_capability = -1;
3375static int hf_ieee80211_mesh_id = -1;
3376static int hf_ieee80211_mesh_config_cap_accepting = -1;
3377static int hf_ieee80211_mesh_config_cap_mcca_support = -1;
3378static int hf_ieee80211_mesh_config_cap_mcca_enabled = -1;
3379static int hf_ieee80211_mesh_config_cap_forwarding = -1;
3380static int hf_ieee80211_mesh_config_cap_mbca_enabled = -1;
3381static int hf_ieee80211_mesh_config_cap_tbtt_adjusting = -1;
3382static int hf_ieee80211_mesh_config_cap_power_save_level = -1;
3383static int hf_ieee80211_mesh_form_info_num_of_peerings = -1;
3384
3385static int hf_ieee80211_ff_public_action = -1;
3386static int hf_ieee80211_ff_protected_public_action = -1;
3387static int hf_ieee80211_ff_tod = -1;
3388static int hf_ieee80211_ff_toa = -1;
3389static int hf_ieee80211_ff_max_tod_err = -1;
3390static int hf_ieee80211_ff_max_toa_err = -1;
3391
3392/* ************************************************************************* */
3393/* Flags found in the capability field (fixed field) */
3394/* ************************************************************************* */
3395static int hf_ieee80211_ff_capture = -1;
3396static int hf_ieee80211_ff_cf_ess = -1;
3397static int hf_ieee80211_ff_cf_ibss = -1;
3398static int hf_ieee80211_ff_cf_sta_poll = -1; /* CF pollable status for a STA */
3399static int hf_ieee80211_ff_cf_ap_poll = -1; /* CF pollable status for an AP */
3400static int hf_ieee80211_ff_cf_privacy = -1;
3401static int hf_ieee80211_ff_cf_preamble = -1;
3402static int hf_ieee80211_ff_cf_pbcc = -1;
3403static int hf_ieee80211_ff_cf_agility = -1;
3404static int hf_ieee80211_ff_short_slot_time = -1;
3405static int hf_ieee80211_ff_dsss_ofdm = -1;
3406static int hf_ieee80211_ff_cf_spec_man = -1;
3407static int hf_ieee80211_ff_cf_apsd = -1;
3408static int hf_ieee80211_ff_radio_measurement = -1;
3409static int hf_ieee80211_ff_cf_del_blk_ack = -1;
3410static int hf_ieee80211_ff_cf_imm_blk_ack = -1;
3411
3412/* ************************************************************************* */
3413/* A-MSDU fields */
3414/* ************************************************************************* */
3415static int hf_ieee80211_amsdu_subframe = -1;
3416static int hf_ieee80211_amsdu_length = -1;
3417
3418/* ************************************************************************* */
3419/* Tagged value format fields */
3420/* ************************************************************************* */
3421static int hf_ieee80211_tagged_parameters = -1; /* Tagged payload item */
3422static int hf_ieee80211_tag = -1;
3423static int hf_ieee80211_tag_number = -1;
3424static int hf_ieee80211_tag_length = -1;
3425static int hf_ieee80211_tag_interpretation = -1;
3426static int hf_ieee80211_tag_data = -1;
3427static int hf_ieee80211_tag_oui = -1;
3428static int hf_ieee80211_tag_oui_wfa_subtype = -1;
3429static int hf_ieee80211_tag_ssid = -1;
3430static int hf_ieee80211_tag_supp_rates = -1;
3431static int hf_ieee80211_tag_fh_dwell_time = -1;
3432static int hf_ieee80211_tag_fh_hop_set = -1;
3433static int hf_ieee80211_tag_fh_hop_pattern = -1;
3434static int hf_ieee80211_tag_fh_hop_index = -1;
3435static int hf_ieee80211_tag_ds_param_channel = -1;
3436static int hf_ieee80211_tag_cfp_count = -1;
3437static int hf_ieee80211_tag_cfp_period = -1;
3438static int hf_ieee80211_tag_cfp_max_duration = -1;
3439static int hf_ieee80211_tag_cfp_dur_remaining = -1;
3440static int hf_ieee80211_tim_dtim_count = -1;
3441static int hf_ieee80211_tim_dtim_period = -1;
3442static int hf_ieee80211_tim_bmapctl = -1;
3443static int hf_ieee80211_tim_bmapctl_mcast = -1;
3444static int hf_ieee80211_tim_bmapctl_offset = -1;
3445static int hf_ieee80211_tim_partial_virtual_bitmap = -1;
3446static int hf_ieee80211_tim_aid = -1;
3447static int hf_ieee80211_tag_ibss_atim_window = -1;
3448static int hf_ieee80211_tag_country_info_code = -1;
3449static int hf_ieee80211_tag_country_info_env = -1;
3450static int hf_ieee80211_tag_country_info_pad = -1;
3451static int hf_ieee80211_tag_country_info_fnm = -1;
3452static int hf_ieee80211_tag_country_info_fnm_fcn = -1;
3453static int hf_ieee80211_tag_country_info_fnm_nc = -1;
3454static int hf_ieee80211_tag_country_info_fnm_mtpl = -1;
3455static int hf_ieee80211_tag_country_info_rrc = -1;
3456static int hf_ieee80211_tag_country_info_rrc_oei = -1;
3457static int hf_ieee80211_tag_country_info_rrc_oc = -1;
3458static int hf_ieee80211_tag_country_info_rrc_cc = -1;
3459static int hf_ieee80211_tag_fh_hopping_parameter_prime_radix = -1;
3460static int hf_ieee80211_tag_fh_hopping_parameter_nb_channels = -1;
3461static int hf_ieee80211_tag_fh_hopping_table_flag = -1;
3462static int hf_ieee80211_tag_fh_hopping_table_number_of_sets = -1;
3463static int hf_ieee80211_tag_fh_hopping_table_modulus = -1;
3464static int hf_ieee80211_tag_fh_hopping_table_offset = -1;
3465static int hf_ieee80211_tag_fh_hopping_random_table = -1;
3466static int hf_ieee80211_tag_request = -1;
3467static int hf_ieee80211_tag_challenge_text = -1;
3468
3469static int hf_ieee80211_wep_iv = -1;
3470static int hf_ieee80211_wep_iv_weak = -1;
3471static int hf_ieee80211_tkip_extiv = -1;
3472static int hf_ieee80211_ccmp_extiv = -1;
3473static int hf_ieee80211_wep_key = -1;
3474static int hf_ieee80211_wep_icv = -1;
3475static int hf_ieee80211_fc_analysis_pmk = -1;
3476static int hf_ieee80211_fc_analysis_tk = -1;
3477static int hf_ieee80211_fc_analysis_gtk = -1;
3478
3479static int hf_ieee80211_block_ack_request_control = -1;
3480static int hf_ieee80211_block_ack_control = -1;
3481static int hf_ieee80211_block_ack_control_ack_policy = -1;
3482static int hf_ieee80211_block_ack_control_multi_tid = -1;
3483static int hf_ieee80211_block_ack_control_compressed_bitmap = -1;
3484static int hf_ieee80211_block_ack_control_reserved = -1;
3485
3486static int hf_ieee80211_block_ack_control_basic_tid_info = -1;
3487static int hf_ieee80211_block_ack_control_compressed_tid_info = -1;
3488static int hf_ieee80211_block_ack_control_multi_tid_info = -1;
3489
3490static int hf_ieee80211_block_ack_multi_tid_info = -1;
3491static int hf_ieee80211_block_ack_request_type = -1;
3492static int hf_ieee80211_block_ack_multi_tid_reserved = -1;
3493static int hf_ieee80211_block_ack_multi_tid_value = -1;
3494static int hf_ieee80211_block_ack_type = -1;
3495static int hf_ieee80211_block_ack_bitmap = -1;
3496static int hf_ieee80211_block_ack_bitmap_missing_frame = -1;
3497
3498static int hf_ieee80211_tag_measure_request_measurement_mode = -1;
3499static int hf_ieee80211_tag_measure_request_bssid = -1;
3500
3501static int hf_ieee80211_tag_measure_request_subelement_length = -1;
3502static int hf_ieee80211_tag_measure_request_beacon_sub_id = -1;
3503static int hf_ieee80211_tag_measure_request_beacon_sub_ssid = -1;
3504static int hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition = -1;
3505static int hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset = -1;
3506static int hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail = -1;
3507static int hf_ieee80211_tag_measure_request_beacon_sub_request = -1;
3508static int hf_ieee80211_tag_measure_request_beacon_unknown = -1;
3509
3510static int hf_ieee80211_tag_measure_request_channel_load_sub_id = -1;
3511static int hf_ieee80211_tag_measure_request_channel_load_sub_reporting_condition = -1;
3512static int hf_ieee80211_tag_measure_request_channel_load_sub_reporting_ref = -1;
3513
3514static int hf_ieee80211_tag_measure_request_noise_histogram_sub_id = -1;
3515static int hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition = -1;
3516static int hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_anpi_ref = -1;
3517
3518static int hf_ieee80211_tag_measure_request_frame_request_type = -1;
3519static int hf_ieee80211_tag_measure_request_mac_address = -1;
3520static int hf_ieee80211_tag_measure_request_peer_mac_address = -1;
3521static int hf_ieee80211_tag_measure_request_group_id = -1;
3522
3523static int hf_ieee80211_tag_measure_request_unknown = -1;
3524
3525static int hf_ieee80211_ht_pren_type = -1;
3526static int hf_ieee80211_ht_pren_unknown = -1;
3527
3528static int hf_ieee80211_ht_cap = -1;
3529static int hf_ieee80211_ht_vs_cap = -1;
3530static int hf_ieee80211_ht_ldpc_coding = -1;
3531static int hf_ieee80211_ht_chan_width = -1;
3532static int hf_ieee80211_ht_sm_pwsave = -1;
3533static int hf_ieee80211_ht_green = -1;
3534static int hf_ieee80211_ht_short20 = -1;
3535static int hf_ieee80211_ht_short40 = -1;
3536static int hf_ieee80211_ht_tx_stbc = -1;
3537static int hf_ieee80211_ht_rx_stbc = -1;
3538static int hf_ieee80211_ht_delayed_block_ack = -1;
3539static int hf_ieee80211_ht_max_amsdu = -1;
3540static int hf_ieee80211_ht_dss_cck_40 = -1;
3541static int hf_ieee80211_ht_psmp = -1;
3542static int hf_ieee80211_ht_40_mhz_intolerant = -1;
3543static int hf_ieee80211_ht_l_sig = -1;
3544
3545static int hf_ieee80211_ext_bss_mu_mimo_capable_sta_count = -1;
3546static int hf_ieee80211_ext_bss_ss_underutilization = -1;
3547static int hf_ieee80211_ext_bss_observable_sec_20mhz_utilization = -1;
3548static int hf_ieee80211_ext_bss_observable_sec_40mhz_utilization = -1;
3549static int hf_ieee80211_ext_bss_observable_sec_80mhz_utilization = -1;
3550static int hf_ieee80211_wide_bw_new_channel_width = -1;
3551static int hf_ieee80211_wide_bw_new_channel_center_freq_segment0 = -1;
3552static int hf_ieee80211_wide_bw_new_channel_center_freq_segment1 = -1;
3553
3554static int hf_ieee80211_operat_notification_mode = -1;
3555static int hf_ieee80211_operat_mode_field_channel_width = -1;
3556static int hf_ieee80211_operat_mode_field_reserved = -1;
3557static int hf_ieee80211_operat_mode_field_rxnss = -1;
3558static int hf_ieee80211_operat_mode_field_rxnsstype= -1;
3559static int hf_ieee80211_ampduparam = -1;
3560static int hf_ieee80211_ampduparam_vs = -1;
3561static int hf_ieee80211_ampduparam_mpdu = -1;
3562static int hf_ieee80211_ampduparam_mpdu_start_spacing = -1;
3563static int hf_ieee80211_ampduparam_reserved = -1;
3564
3565static int hf_ieee80211_mcsset = -1;
3566static int hf_ieee80211_mcsset_vs = -1;
3567static int hf_ieee80211_mcsset_rx_bitmask = -1;
3568static int hf_ieee80211_mcsset_rx_bitmask_0to7 = -1;
3569static int hf_ieee80211_mcsset_rx_bitmask_8to15 = -1;
3570static int hf_ieee80211_mcsset_rx_bitmask_16to23 = -1;
3571static int hf_ieee80211_mcsset_rx_bitmask_24to31 = -1;
3572static int hf_ieee80211_mcsset_rx_bitmask_32 = -1;
3573static int hf_ieee80211_mcsset_rx_bitmask_33to38 = -1;
3574static int hf_ieee80211_mcsset_rx_bitmask_39to52 = -1;
3575static int hf_ieee80211_mcsset_rx_bitmask_53to76 = -1;
3576static int hf_ieee80211_mcsset_highest_data_rate = -1;
3577static int hf_ieee80211_mcsset_tx_mcs_set_defined = -1;
3578static int hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal = -1;
3579static int hf_ieee80211_mcsset_tx_max_spatial_streams = -1;
3580static int hf_ieee80211_mcsset_tx_unequal_modulation = -1;
3581
3582static int hf_ieee80211_htex_cap = -1;
3583static int hf_ieee80211_htex_vs_cap = -1;
3584static int hf_ieee80211_htex_pco = -1;
3585static int hf_ieee80211_htex_transtime = -1;
3586static int hf_ieee80211_htex_mcs = -1;
3587static int hf_ieee80211_htex_htc_support = -1;
3588static int hf_ieee80211_htex_rd_responder = -1;
3589
3590static int hf_ieee80211_txbf = -1;
3591static int hf_ieee80211_txbf_vs = -1;
3592static int hf_ieee80211_txbf_cap = -1;
3593static int hf_ieee80211_txbf_rcv_ssc = -1;
3594static int hf_ieee80211_txbf_tx_ssc = -1;
3595static int hf_ieee80211_txbf_rcv_ndp = -1;
3596static int hf_ieee80211_txbf_tx_ndp = -1;
3597static int hf_ieee80211_txbf_impl_txbf = -1;
3598static int hf_ieee80211_txbf_calib = -1;
3599static int hf_ieee80211_txbf_expl_csi = -1;
3600static int hf_ieee80211_txbf_expl_uncomp_fm = -1;
3601static int hf_ieee80211_txbf_expl_comp_fm = -1;
3602static int hf_ieee80211_txbf_expl_bf_csi = -1;
3603static int hf_ieee80211_txbf_expl_uncomp_fm_feed = -1;
3604static int hf_ieee80211_txbf_expl_comp_fm_feed = -1;
3605static int hf_ieee80211_txbf_csi_num_bf_ant = -1;
3606static int hf_ieee80211_txbf_min_group = -1;
3607static int hf_ieee80211_txbf_uncomp_sm_bf_ant = -1;
3608static int hf_ieee80211_txbf_comp_sm_bf_ant = -1;
3609static int hf_ieee80211_txbf_csi_max_rows_bf = -1;
3610static int hf_ieee80211_txbf_chan_est = -1;
3611static int hf_ieee80211_txbf_resrv = -1;
3612
3613/*** Begin: 802.11n D1.10 - HT Information IE ***/
3614static int hf_ieee80211_ht_info_primary_channel = -1;
3615
3616static int hf_ieee80211_ht_info_delimiter1 = -1;
3617static int hf_ieee80211_ht_info_secondary_channel_offset = -1;
3618static int hf_ieee80211_ht_info_channel_width = -1;
3619static int hf_ieee80211_ht_info_rifs_mode = -1;
3620static int hf_ieee80211_ht_info_psmp_stas_only = -1;
3621static int hf_ieee80211_ht_info_service_interval_granularity = -1;
3622
3623static int hf_ieee80211_ht_info_delimiter2 = -1;
3624static int hf_ieee80211_ht_info_operating_mode = -1;
3625static int hf_ieee80211_ht_info_non_greenfield_sta_present = -1;
3626static int hf_ieee80211_ht_info_transmit_burst_limit = -1;
3627static int hf_ieee80211_ht_info_obss_non_ht_stas_present = -1;
3628static int hf_ieee80211_ht_info_reserved_1 = -1;
3629
3630static int hf_ieee80211_ht_info_delimiter3 = -1;
3631static int hf_ieee80211_ht_info_reserved_2 = -1;
3632static int hf_ieee80211_ht_info_dual_beacon = -1;
3633static int hf_ieee80211_ht_info_dual_cts_protection = -1;
3634static int hf_ieee80211_ht_info_secondary_beacon = -1;
3635static int hf_ieee80211_ht_info_lsig_txop_protection_full_support = -1;
3636static int hf_ieee80211_ht_info_pco_active = -1;
3637static int hf_ieee80211_ht_info_pco_phase = -1;
3638static int hf_ieee80211_ht_info_reserved_3 = -1;
3639/*** End: 802.11n D1.10 - HT Information IE ***/
3640
3641static int hf_ieee80211_tag_ap_channel_report_operating_class = -1;
3642static int hf_ieee80211_tag_ap_channel_report_channel_list = -1;
3643
3644static int hf_ieee80211_tag_secondary_channel_offset = -1;
3645
3646static int hf_ieee80211_tag_bss_ap_avg_access_delay = -1;
3647
3648static int hf_ieee80211_tag_antenna_id = -1;
3649
3650static int hf_ieee80211_tag_rsni = -1;
3651
3652static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask = -1;
3653static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0 = -1;
3654static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1 = -1;
3655static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2 = -1;
3656static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3 = -1;
3657static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4 = -1;
3658static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5 = -1;
3659static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6 = -1;
3660static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7 = -1;
3661static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0 = -1;
3662static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1 = -1;
3663static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2 = -1;
3664static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3 = -1;
3665static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv = -1;
3666static int hf_ieee80211_tag_bss_avb_adm_cap_up0 = -1;
3667static int hf_ieee80211_tag_bss_avb_adm_cap_up1 = -1;
3668static int hf_ieee80211_tag_bss_avb_adm_cap_up2 = -1;
3669static int hf_ieee80211_tag_bss_avb_adm_cap_up3 = -1;
3670static int hf_ieee80211_tag_bss_avb_adm_cap_up4 = -1;
3671static int hf_ieee80211_tag_bss_avb_adm_cap_up5 = -1;
3672static int hf_ieee80211_tag_bss_avb_adm_cap_up6 = -1;
3673static int hf_ieee80211_tag_bss_avb_adm_cap_up7 = -1;
3674static int hf_ieee80211_tag_bss_avb_adm_cap_ac0 = -1;
3675static int hf_ieee80211_tag_bss_avb_adm_cap_ac1 = -1;
3676static int hf_ieee80211_tag_bss_avb_adm_cap_ac2 = -1;
3677static int hf_ieee80211_tag_bss_avb_adm_cap_ac3 = -1;
3678
3679static int hf_ieee80211_tag_bss_avg_ac_access_delay_be = -1;
3680static int hf_ieee80211_tag_bss_avg_ac_access_delay_bk = -1;
3681static int hf_ieee80211_tag_bss_avg_ac_access_delay_vi = -1;
3682static int hf_ieee80211_tag_bss_avg_ac_access_delay_vo = -1;
3683
3684static int hf_ieee80211_tag_rm_enabled_capabilities = -1;
3685static int hf_ieee80211_tag_rm_enabled_capabilities_b0 = -1;
3686static int hf_ieee80211_tag_rm_enabled_capabilities_b1 = -1;
3687static int hf_ieee80211_tag_rm_enabled_capabilities_b2 = -1;
3688static int hf_ieee80211_tag_rm_enabled_capabilities_b3 = -1;
3689static int hf_ieee80211_tag_rm_enabled_capabilities_b4 = -1;
3690static int hf_ieee80211_tag_rm_enabled_capabilities_b5 = -1;
3691static int hf_ieee80211_tag_rm_enabled_capabilities_b6 = -1;
3692static int hf_ieee80211_tag_rm_enabled_capabilities_b7 = -1;
3693static int hf_ieee80211_tag_rm_enabled_capabilities_b8 = -1;
3694static int hf_ieee80211_tag_rm_enabled_capabilities_b9 = -1;
3695static int hf_ieee80211_tag_rm_enabled_capabilities_b10 = -1;
3696static int hf_ieee80211_tag_rm_enabled_capabilities_b11 = -1;
3697static int hf_ieee80211_tag_rm_enabled_capabilities_b12 = -1;
3698static int hf_ieee80211_tag_rm_enabled_capabilities_b13 = -1;
3699static int hf_ieee80211_tag_rm_enabled_capabilities_b14 = -1;
3700static int hf_ieee80211_tag_rm_enabled_capabilities_b15 = -1;
3701static int hf_ieee80211_tag_rm_enabled_capabilities_b16 = -1;
3702static int hf_ieee80211_tag_rm_enabled_capabilities_b17 = -1;
3703static int hf_ieee80211_tag_rm_enabled_capabilities_b18to20 = -1;
3704static int hf_ieee80211_tag_rm_enabled_capabilities_b21to23 = -1;
3705static int hf_ieee80211_tag_rm_enabled_capabilities_b24to26 = -1;
3706static int hf_ieee80211_tag_rm_enabled_capabilities_b27 = -1;
3707static int hf_ieee80211_tag_rm_enabled_capabilities_b28 = -1;
3708static int hf_ieee80211_tag_rm_enabled_capabilities_b29 = -1;
3709static int hf_ieee80211_tag_rm_enabled_capabilities_b30 = -1;
3710static int hf_ieee80211_tag_rm_enabled_capabilities_b31 = -1;
3711static int hf_ieee80211_tag_rm_enabled_capabilities_b32 = -1;
3712static int hf_ieee80211_tag_rm_enabled_capabilities_b33 = -1;
3713static int hf_ieee80211_tag_rm_enabled_capabilities_o5 = -1;
3714
3715static int hf_ieee80211_tag_power_constraint_local = -1;
3716
3717static int hf_ieee80211_tag_power_capability_min = -1;
3718static int hf_ieee80211_tag_power_capability_max = -1;
3719
3720static int hf_ieee80211_tag_tpc_report_trsmt_pow = -1;
3721static int hf_ieee80211_tag_tpc_report_link_mrg = -1;
3722
3723static int hf_ieee80211_tag_supported_channels = -1;
3724static int hf_ieee80211_tag_supported_channels_first = -1;
3725static int hf_ieee80211_tag_supported_channels_range = -1;
3726
3727static int hf_ieee80211_csa_channel_switch_mode = -1;
3728static int hf_ieee80211_csa_new_channel_number = -1;
3729static int hf_ieee80211_csa_channel_switch_count = -1;
3730
3731static int hf_ieee80211_tag_measure_request_token = -1;
3732static int hf_ieee80211_tag_measure_request_mode = -1;
3733static int hf_ieee80211_tag_measure_request_mode_parallel = -1;
3734static int hf_ieee80211_tag_measure_request_mode_enable = -1;
3735static int hf_ieee80211_tag_measure_request_mode_request = -1;
3736static int hf_ieee80211_tag_measure_request_mode_report = -1;
3737static int hf_ieee80211_tag_measure_request_mode_duration_mandatory = -1;
3738static int hf_ieee80211_tag_measure_request_mode_reserved = -1;
3739static int hf_ieee80211_tag_measure_request_type = -1;
3740
3741static int hf_ieee80211_tag_measure_request_channel_number = -1;
3742static int hf_ieee80211_tag_measure_request_start_time = -1;
3743static int hf_ieee80211_tag_measure_request_duration = -1;
3744
3745static int hf_ieee80211_tag_measure_request_operating_class = -1;
3746static int hf_ieee80211_tag_measure_request_randomization_interval = -1;
3747
3748static int hf_ieee80211_tag_measure_report_measurement_token = -1;
3749static int hf_ieee80211_tag_measure_report_mode = -1;
3750static int hf_ieee80211_tag_measure_report_mode_late = -1;
3751static int hf_ieee80211_tag_measure_report_mode_incapable = -1;
3752static int hf_ieee80211_tag_measure_report_mode_refused = -1;
3753static int hf_ieee80211_tag_measure_report_mode_reserved = -1;
3754static int hf_ieee80211_tag_measure_report_type = -1;
3755static int hf_ieee80211_tag_measure_report_channel_number = -1;
3756static int hf_ieee80211_tag_measure_report_start_time = -1;
3757static int hf_ieee80211_tag_measure_report_duration = -1;
3758
3759static int hf_ieee80211_tag_measure_basic_map_field = -1;
3760static int hf_ieee80211_tag_measure_map_field_bss = -1;
3761static int hf_ieee80211_tag_measure_map_field_odfm = -1;
3762static int hf_ieee80211_tag_measure_map_field_unident_signal = -1;
3763static int hf_ieee80211_tag_measure_map_field_radar = -1;
3764static int hf_ieee80211_tag_measure_map_field_unmeasured = -1;
3765static int hf_ieee80211_tag_measure_map_field_reserved = -1;
3766
3767static int hf_ieee80211_tag_measure_cca_busy_fraction = -1;
3768
3769static int hf_ieee80211_tag_measure_rpi_histogram_report = -1;
3770static int hf_ieee80211_tag_measure_rpi_histogram_report_0 = -1;
3771static int hf_ieee80211_tag_measure_rpi_histogram_report_1 = -1;
3772static int hf_ieee80211_tag_measure_rpi_histogram_report_2 = -1;
3773static int hf_ieee80211_tag_measure_rpi_histogram_report_3 = -1;
3774static int hf_ieee80211_tag_measure_rpi_histogram_report_4 = -1;
3775static int hf_ieee80211_tag_measure_rpi_histogram_report_5 = -1;
3776static int hf_ieee80211_tag_measure_rpi_histogram_report_6 = -1;
3777static int hf_ieee80211_tag_measure_rpi_histogram_report_7 = -1;
3778
3779static int hf_ieee80211_tag_measure_report_operating_class = -1;
3780static int hf_ieee80211_tag_measure_report_channel_load = -1;
3781static int hf_ieee80211_tag_measure_report_frame_info = -1;
3782static int hf_ieee80211_tag_measure_report_frame_info_phy_type = -1;
3783static int hf_ieee80211_tag_measure_report_frame_info_frame_type = -1;
3784static int hf_ieee80211_tag_measure_report_rcpi = -1;
3785static int hf_ieee80211_tag_measure_report_rsni = -1;
3786static int hf_ieee80211_tag_measure_report_bssid = -1;
3787static int hf_ieee80211_tag_measure_report_ant_id = -1;
3788static int hf_ieee80211_tag_measure_report_anpi = -1;
3789static int hf_ieee80211_tag_measure_report_ipi_density_0 = -1;
3790static int hf_ieee80211_tag_measure_report_ipi_density_1 = -1;
3791static int hf_ieee80211_tag_measure_report_ipi_density_2 = -1;
3792static int hf_ieee80211_tag_measure_report_ipi_density_3 = -1;
3793static int hf_ieee80211_tag_measure_report_ipi_density_4 = -1;
3794static int hf_ieee80211_tag_measure_report_ipi_density_5 = -1;
3795static int hf_ieee80211_tag_measure_report_ipi_density_6 = -1;
3796static int hf_ieee80211_tag_measure_report_ipi_density_7 = -1;
3797static int hf_ieee80211_tag_measure_report_ipi_density_8 = -1;
3798static int hf_ieee80211_tag_measure_report_ipi_density_9 = -1;
3799static int hf_ieee80211_tag_measure_report_ipi_density_10 = -1;
3800static int hf_ieee80211_tag_measure_report_parent_tsf = -1;
3801
3802static int hf_ieee80211_tag_measure_report_subelement_length = -1;
3803static int hf_ieee80211_tag_measure_report_beacon_sub_id = -1;
3804
3805static int hf_ieee80211_tag_measure_report_unknown = -1;
3806
3807static int hf_ieee80211_tag_quiet_count = -1;
3808static int hf_ieee80211_tag_quiet_period = -1;
3809static int hf_ieee80211_tag_quiet_duration = -1;
3810static int hf_ieee80211_tag_quiet_offset = -1;
3811
3812static int hf_ieee80211_tag_dfs_owner = -1;
3813static int hf_ieee80211_tag_dfs_recovery_interval = -1;
3814static int hf_ieee80211_tag_dfs_channel_map = -1;
3815static int hf_ieee80211_tag_dfs_channel_number = -1;
3816static int hf_ieee80211_tag_dfs_map = -1;
3817
3818static int hf_ieee80211_tag_erp_info = -1;
3819static int hf_ieee80211_tag_erp_info_erp_present = -1;
3820static int hf_ieee80211_tag_erp_info_use_protection = -1;
3821static int hf_ieee80211_tag_erp_info_barker_preamble_mode = -1;
3822static int hf_ieee80211_tag_erp_info_reserved = -1;
3823
3824static int hf_ieee80211_tag_extended_capabilities = -1;
3825static int hf_ieee80211_tag_extended_capabilities_b0 = -1;
3826static int hf_ieee80211_tag_extended_capabilities_b1 = -1;
3827static int hf_ieee80211_tag_extended_capabilities_b2 = -1;
3828static int hf_ieee80211_tag_extended_capabilities_b3 = -1;
3829static int hf_ieee80211_tag_extended_capabilities_b4 = -1;
3830static int hf_ieee80211_tag_extended_capabilities_b5 = -1;
3831static int hf_ieee80211_tag_extended_capabilities_b6 = -1;
3832static int hf_ieee80211_tag_extended_capabilities_b7 = -1;
3833static int hf_ieee80211_tag_extended_capabilities_b8 = -1;
3834static int hf_ieee80211_tag_extended_capabilities_b9 = -1;
3835static int hf_ieee80211_tag_extended_capabilities_b10 = -1;
3836static int hf_ieee80211_tag_extended_capabilities_b11 = -1;
3837static int hf_ieee80211_tag_extended_capabilities_b12 = -1;
3838static int hf_ieee80211_tag_extended_capabilities_b13 = -1;
3839static int hf_ieee80211_tag_extended_capabilities_b14 = -1;
3840static int hf_ieee80211_tag_extended_capabilities_b15 = -1;
3841static int hf_ieee80211_tag_extended_capabilities_b16 = -1;
3842static int hf_ieee80211_tag_extended_capabilities_b17 = -1;
3843static int hf_ieee80211_tag_extended_capabilities_b18 = -1;
3844static int hf_ieee80211_tag_extended_capabilities_b19 = -1;
3845static int hf_ieee80211_tag_extended_capabilities_b20 = -1;
3846static int hf_ieee80211_tag_extended_capabilities_b21 = -1;
3847static int hf_ieee80211_tag_extended_capabilities_b22 = -1;
3848static int hf_ieee80211_tag_extended_capabilities_b23 = -1;
3849static int hf_ieee80211_tag_extended_capabilities_b24 = -1;
3850static int hf_ieee80211_tag_extended_capabilities_b25 = -1;
3851static int hf_ieee80211_tag_extended_capabilities_b26 = -1;
3852static int hf_ieee80211_tag_extended_capabilities_b27 = -1;
3853static int hf_ieee80211_tag_extended_capabilities_b28 = -1;
3854static int hf_ieee80211_tag_extended_capabilities_b29 = -1;
3855static int hf_ieee80211_tag_extended_capabilities_b30 = -1;
3856static int hf_ieee80211_tag_extended_capabilities_b31 = -1;
3857static int hf_ieee80211_tag_extended_capabilities_b32 = -1;
3858static int hf_ieee80211_tag_extended_capabilities_b33 = -1;
3859static int hf_ieee80211_tag_extended_capabilities_b34 = -1;
3860static int hf_ieee80211_tag_extended_capabilities_b35 = -1;
3861static int hf_ieee80211_tag_extended_capabilities_b36 = -1;
3862static int hf_ieee80211_tag_extended_capabilities_b37 = -1;
3863static int hf_ieee80211_tag_extended_capabilities_b38 = -1;
3864static int hf_ieee80211_tag_extended_capabilities_b39 = -1;
3865static int hf_ieee80211_tag_extended_capabilities_b40 = -1;
3866static int hf_ieee80211_tag_extended_capabilities_serv_int_granularity = -1;
3867static int hf_ieee80211_tag_extended_capabilities_b44 = -1;
3868static int hf_ieee80211_tag_extended_capabilities_b45 = -1;
3869static int hf_ieee80211_tag_extended_capabilities_b46 = -1;
3870static int hf_ieee80211_tag_extended_capabilities_b47 = -1;
3871static int hf_ieee80211_tag_extended_capabilities_b48 = -1;
3872static int hf_ieee80211_tag_extended_capabilities_b61 = -1;
3873static int hf_ieee80211_tag_extended_capabilities_b62 = -1;
3874static int hf_ieee80211_tag_extended_capabilities_b63 = -1;
3875static int hf_ieee80211_tag_extended_capabilities_b64 = -1;
3876static int hf_ieee80211_tag_extended_capabilities_o7 = -1;
3877static int hf_ieee80211_tag_extended_capabilities_o8 = -1;
3878static int hf_ieee80211_tag_extended_capabilities_o9 = -1;
3879
3880static int hf_ieee80211_tag_cisco_ccx1_unknown = -1;
3881static int hf_ieee80211_tag_cisco_ccx1_name = -1;
3882static int hf_ieee80211_tag_cisco_ccx1_clients = -1;
3883static int hf_ieee80211_tag_cisco_ccx1_unknown2 = -1;
3884
3885static int hf_ieee80211_vht_cap = -1;
3886static int hf_ieee80211_vht_max_mpdu_length = -1;
3887static int hf_ieee80211_vht_supported_chan_width_set = -1;
3888static int hf_ieee80211_vht_rx_ldpc = -1;
3889static int hf_ieee80211_vht_short_gi_for_80 = -1;
3890static int hf_ieee80211_vht_short_gi_for_160 = -1;
3891static int hf_ieee80211_vht_tx_stbc = -1;
3892static int hf_ieee80211_vht_rx_stbc = -1;
3893static int hf_ieee80211_vht_su_beamformer_cap = -1;
3894static int hf_ieee80211_vht_su_beamformee_cap = -1;
3895static int hf_ieee80211_vht_beamformer_antennas = -1;
3896static int hf_ieee80211_vht_sounding_dimensions = -1;
3897static int hf_ieee80211_vht_mu_beamformer_cap = -1;
3898static int hf_ieee80211_vht_mu_beamformee_cap = -1;
3899static int hf_ieee80211_vht_txop_ps = -1;
3900static int hf_ieee80211_vht_var_htc_field = -1;
3901static int hf_ieee80211_vht_max_ampdu = -1;
3902static int hf_ieee80211_vht_link_adaptation_cap = -1;
3903static int hf_ieee80211_vht_rx_pattern = -1;
3904static int hf_ieee80211_vht_tx_pattern = -1;
3905static int hf_ieee80211_vht_reserv = -1;
3906
3907static int hf_ieee80211_vht_mcsset = -1;
3908
3909static int hf_ieee80211_vht_mcsset_rx_mcs_map = -1;
3910static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss = -1;
3911static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss = -1;
3912static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss = -1;
3913static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss = -1;
3914static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss = -1;
3915static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss = -1;
3916static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss = -1;
3917static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss = -1;
3918
3919static int hf_ieee80211_vht_mcsset_rx_highest_long_gi = -1;
3920
3921static int hf_ieee80211_vht_mcsset_tx_mcs_map = -1;
3922static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss = -1;
3923static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss = -1;
3924static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss = -1;
3925static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss = -1;
3926static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss = -1;
3927static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss = -1;
3928static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss = -1;
3929static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss = -1;
3930
3931static int hf_ieee80211_vht_op = -1;
3932static int hf_ieee80211_vht_op_channel_width = -1;
3933static int hf_ieee80211_vht_op_channel_center0 = -1;
3934static int hf_ieee80211_vht_op_channel_center1 = -1;
3935
3936static int hf_ieee80211_vht_op_basic_mcs_map = -1;
3937static int hf_ieee80211_vht_op_max_basic_mcs_for_1_ss = -1;
3938static int hf_ieee80211_vht_op_max_basic_mcs_for_2_ss = -1;
3939static int hf_ieee80211_vht_op_max_basic_mcs_for_3_ss = -1;
3940static int hf_ieee80211_vht_op_max_basic_mcs_for_4_ss = -1;
3941static int hf_ieee80211_vht_op_max_basic_mcs_for_5_ss = -1;
3942static int hf_ieee80211_vht_op_max_basic_mcs_for_6_ss = -1;
3943static int hf_ieee80211_vht_op_max_basic_mcs_for_7_ss = -1;
3944static int hf_ieee80211_vht_op_max_basic_mcs_for_8_ss = -1;
3945static int hf_ieee80211_vht_mcsset_tx_highest_long_gi = -1;
3946
3947static int hf_ieee80211_vht_tpe_pwr_info = -1;
3948static int hf_ieee80211_vht_tpe_pwr_info_count = -1;
3949static int hf_ieee80211_vht_tpe_pwr_info_unit = -1;
3950static int hf_ieee80211_vht_tpe_pwr_info_reserved = -1;
3951static int hf_ieee80211_vht_tpe_pwr_constr_20 = -1;
3952static int hf_ieee80211_vht_tpe_pwr_constr_40 = -1;
3953static int hf_ieee80211_vht_tpe_pwr_constr_80 = -1;
3954static int hf_ieee80211_vht_tpe_pwr_constr_160 = -1;
3955
3956static int hf_ieee80211_beamform_feedback_seg_retrans_bitmap = -1;
3957
3958static int hf_ieee80211_vht_ndp_annc_token = -1;
3959static int hf_ieee80211_vht_ndp_annc_token_number = -1;
3960static int hf_ieee80211_vht_ndp_annc_token_reserved = -1;
3961static int hf_ieee80211_vht_ndp_annc_sta_info = -1;
3962static int hf_ieee80211_vht_ndp_annc_sta_info_aid12 = -1;
3963static int hf_ieee80211_vht_ndp_annc_sta_info_feedback_type = -1;
3964static int hf_ieee80211_vht_ndp_annc_sta_info_nc_index = -1;
3965static int hf_ieee80211_vht_ndp_annc_sta_info_reserved = -1;
3966
3967
3968static int hf_ieee80211_ff_vht_action = -1;
3969static int hf_ieee80211_ff_vht_mimo_cntrl = -1;
3970static int hf_ieee80211_ff_vht_mimo_cntrl_nc_index = -1;
3971static int hf_ieee80211_ff_vht_mimo_cntrl_nr_index = -1;
3972static int hf_ieee80211_ff_vht_mimo_cntrl_channel_width = -1;
3973static int hf_ieee80211_ff_vht_mimo_cntrl_grouping = -1;
3974static int hf_ieee80211_ff_vht_mimo_cntrl_codebook_info = -1;
3975static int hf_ieee80211_ff_vht_mimo_cntrl_feedback_type = -1;
3976static int hf_ieee80211_ff_vht_mimo_cntrl_remaining_feedback_seg = -1;
3977static int hf_ieee80211_ff_vht_mimo_cntrl_first_feedback_seg = -1;
3978static int hf_ieee80211_ff_vht_mimo_cntrl_reserved = -1;
3979static int hf_ieee80211_ff_vht_mimo_cntrl_sounding_dialog_token_number = -1;
3980
3981static const int *hf_ieee80211_ff_vht_mimo_cntrl_fields[] = {
3982 &hf_ieee80211_ff_vht_mimo_cntrl_nc_index,
3983 &hf_ieee80211_ff_vht_mimo_cntrl_nr_index,
3984 &hf_ieee80211_ff_vht_mimo_cntrl_channel_width,
3985 &hf_ieee80211_ff_vht_mimo_cntrl_grouping,
3986 &hf_ieee80211_ff_vht_mimo_cntrl_codebook_info,
3987 &hf_ieee80211_ff_vht_mimo_cntrl_feedback_type,
3988 &hf_ieee80211_ff_vht_mimo_cntrl_remaining_feedback_seg,
3989 &hf_ieee80211_ff_vht_mimo_cntrl_first_feedback_seg,
3990 &hf_ieee80211_ff_vht_mimo_cntrl_reserved,
3991 &hf_ieee80211_ff_vht_mimo_cntrl_sounding_dialog_token_number,
3992 NULL((void*)0),
3993};
3994
3995static int hf_ieee80211_vht_compressed_beamforming_report = -1;
3996static int hf_ieee80211_vht_compressed_beamforming_report_snr = -1;
3997static int hf_ieee80211_vht_compressed_beamforming_feedback_matrix = -1;
3998static int hf_ieee80211_vht_group_id_management = -1;
3999static int hf_ieee80211_vht_membership_status_array = -1;
4000static int hf_ieee80211_vht_user_position_array = -1;
4001static int hf_ieee80211_vht_operation_mode_notification = -1;
4002
4003static int hf_ieee80211_tag_neighbor_report_bssid = -1;
4004static int hf_ieee80211_tag_neighbor_report_bssid_info = -1;
4005static int hf_ieee80211_tag_neighbor_report_bssid_info_reachability = -1;
4006static int hf_ieee80211_tag_neighbor_report_bssid_info_security = -1;
4007static int hf_ieee80211_tag_neighbor_report_bssid_info_key_scope = -1;
4008static int hf_ieee80211_tag_neighbor_report_bssid_info_capability = -1;
4009static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng = -1;
4010static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos = -1;
4011static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd = -1;
4012static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt = -1;
4013static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_dback = -1;
4014static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_iback = -1;
4015static int hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain = -1;
4016static int hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput = -1;
4017static int hf_ieee80211_tag_neighbor_report_bssid_info_reserved = -1;
4018static int hf_ieee80211_tag_neighbor_report_ope_class = -1;
4019static int hf_ieee80211_tag_neighbor_report_channel_number = -1;
4020static int hf_ieee80211_tag_neighbor_report_phy_type = -1;
4021static int hf_ieee80211_tag_neighbor_report_subelement_id = -1;
4022static int hf_ieee80211_tag_neighbor_report_subelement_length = -1;
4023
4024static int hf_ieee80211_tag_supported_ope_classes_current = -1;
4025static int hf_ieee80211_tag_supported_ope_classes_alternate = -1;
4026
4027/* IEEE Std 802.11r-2008 7.3.2.47 */
4028static int hf_ieee80211_tag_mobility_domain_mdid = -1;
4029static int hf_ieee80211_tag_mobility_domain_ft_capab = -1;
4030static int hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds = -1;
4031static int hf_ieee80211_tag_mobility_domain_ft_capab_resource_req = -1;
4032
4033/* IEEE Std 802.11r-2008 7.3.2.48 */
4034static int hf_ieee80211_tag_ft_mic_control = -1;
4035static int hf_ieee80211_tag_ft_element_count = -1;
4036static int hf_ieee80211_tag_ft_mic = -1;
4037static int hf_ieee80211_tag_ft_anonce = -1;
4038static int hf_ieee80211_tag_ft_snonce = -1;
4039static int hf_ieee80211_tag_ft_subelem_id = -1;
4040static int hf_ieee80211_tag_ft_subelem_len = -1;
4041static int hf_ieee80211_tag_ft_subelem_data = -1;
4042static int hf_ieee80211_tag_ft_subelem_r1kh_id = -1;
4043static int hf_ieee80211_tag_ft_subelem_gtk_key_info = -1;
4044static int hf_ieee80211_tag_ft_subelem_gtk_key_id = -1;
4045static int hf_ieee80211_tag_ft_subelem_gtk_key_length = -1;
4046static int hf_ieee80211_tag_ft_subelem_gtk_rsc = -1;
4047static int hf_ieee80211_tag_ft_subelem_gtk_key = -1;
4048static int hf_ieee80211_tag_ft_subelem_r0kh_id = -1;
4049static int hf_ieee80211_tag_ft_subelem_igtk_key_id = -1;
4050static int hf_ieee80211_tag_ft_subelem_igtk_ipn = -1;
4051static int hf_ieee80211_tag_ft_subelem_igtk_key_length = -1;
4052static int hf_ieee80211_tag_ft_subelem_igtk_key = -1;
4053
4054/* IEEE Std 802.11-2012: 11r 8.4.2.52 */
4055static int hf_ieee80211_tag_ric_data_id = -1;
4056static int hf_ieee80211_tag_ric_data_desc_cnt = -1;
4057static int hf_ieee80211_tag_ric_data_status_code = -1;
4058
4059/* IEEE Std 802.11-2012: 11r 8.4.2.53 */
4060static int hf_ieee80211_tag_ric_desc_rsrc_type = -1;
4061static int hf_ieee80211_tag_ric_desc_var_params = -1;
4062
4063/* IEEE Std 802.11w-2009 7.3.2.55 */
4064static int hf_ieee80211_tag_mmie_keyid = -1;
4065static int hf_ieee80211_tag_mmie_ipn = -1;
4066static int hf_ieee80211_tag_mmie_mic = -1;
4067
4068/* IEEE Std 802.11-2012: 8.4.2.61 */
4069static int hf_ieee80211_tag_obss_spd = -1;
4070static int hf_ieee80211_tag_obss_sad = -1;
4071static int hf_ieee80211_tag_obss_cwtsi = -1;
4072static int hf_ieee80211_tag_obss_sptpc = -1;
4073static int hf_ieee80211_tag_obss_satpc = -1;
4074static int hf_ieee80211_tag_obss_wctdf = -1;
4075static int hf_ieee80211_tag_obss_sat = -1;
4076
4077
4078/*WAPI-Specification 7.3.2.25 : WAPI Parameter Set*/
4079static int hf_ieee80211_tag_wapi_param_set_version = -1;
4080
4081static int hf_ieee80211_tag_wapi_param_set_akm_suite_count = -1;
4082static int hf_ieee80211_tag_wapi_param_set_akm_suite_oui = -1;
4083static int hf_ieee80211_tag_wapi_param_set_akm_suite_type = -1;
4084
4085static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count = -1;
4086static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui = -1;
4087static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type = -1;
4088
4089static int hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui = -1;
4090static int hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type = -1;
4091
4092static int hf_ieee80211_tag_wapi_param_set_capab = -1;
4093static int hf_ieee80211_tag_wapi_param_set_capab_preauth = -1;
4094static int hf_ieee80211_tag_wapi_param_set_capab_rsvd = -1;
4095static int hf_ieee80211_tag_wapi_param_set_bkid_count = -1;
4096static int hf_ieee80211_tag_wapi_param_set_bkid_list = -1;
4097
4098/* IEEE Std 802.11v-2011 7.3.2.61 */
4099static int hf_ieee80211_tag_time_adv_timing_capab = -1;
4100static int hf_ieee80211_tag_time_adv_time_value = -1;
4101static int hf_ieee80211_tag_time_adv_time_value_year = -1;
4102static int hf_ieee80211_tag_time_adv_time_value_month = -1;
4103static int hf_ieee80211_tag_time_adv_time_value_day = -1;
4104static int hf_ieee80211_tag_time_adv_time_value_hours = -1;
4105static int hf_ieee80211_tag_time_adv_time_value_minutes = -1;
4106static int hf_ieee80211_tag_time_adv_time_value_seconds = -1;
4107static int hf_ieee80211_tag_time_adv_time_value_milliseconds = -1;
4108static int hf_ieee80211_tag_time_adv_time_value_reserved = -1;
4109static int hf_ieee80211_tag_time_adv_time_error = -1;
4110static int hf_ieee80211_tag_time_adv_time_update_counter = -1;
4111
4112/* IEEE Std 802.11-2012 8.4.2.81 */
4113static int hf_ieee80211_tag_bss_max_idle_period = -1;
4114static int hf_ieee80211_tag_bss_max_idle_options_protected = -1;
4115
4116/* IEEE Std 802.11-2012 8.4.2.82 */
4117static int hf_ieee80211_tag_tfs_request_id = -1;
4118static int hf_ieee80211_tag_tfs_request_ac_delete_after_match = -1;
4119static int hf_ieee80211_tag_tfs_request_ac_notify = -1;
4120static int hf_ieee80211_tag_tfs_request_subelem_id = -1;
4121static int hf_ieee80211_tag_tfs_request_subelem_len = -1;
4122static int hf_ieee80211_tag_tfs_request_subelem = -1;
4123
4124/* IEEE Std 802.11-2012 8.4.2.83 */
4125static int hf_ieee80211_tag_tfs_response_subelem_id = -1;
4126static int hf_ieee80211_tag_tfs_response_subelem_len = -1;
4127static int hf_ieee80211_tag_tfs_response_subelem = -1;
4128static int hf_ieee80211_tag_tfs_response_status = -1;
4129static int hf_ieee80211_tag_tfs_response_id = -1;
4130
4131/* IEEE Std 802.11-2012 8.4.2.84 */
4132static int hf_ieee80211_tag_wnm_sleep_mode_action_type = -1;
4133static int hf_ieee80211_tag_wnm_sleep_mode_response_status = -1;
4134static int hf_ieee80211_tag_wnm_sleep_mode_interval = -1;
4135
4136/* IEEE Std 802.11v-2011 7.3.2.87 */
4137static int hf_ieee80211_tag_time_zone = -1;
4138
4139/* IEEE Std 802.11u-2011 7.3.2.92 */
4140static int hf_ieee80211_tag_interworking_access_network_type = -1;
4141static int hf_ieee80211_tag_interworking_internet = -1;
4142static int hf_ieee80211_tag_interworking_asra = -1;
4143static int hf_ieee80211_tag_interworking_esr = -1;
4144static int hf_ieee80211_tag_interworking_uesa = -1;
4145static int hf_ieee80211_tag_interworking_hessid = -1;
4146
4147/* IEEE Std 802.11-2012, 8.4.2.97 */
4148static int hf_ieee80211_tag_qos_map_set_dscp_exc = -1;
4149static int hf_ieee80211_tag_qos_map_set_dscp_exc_val = -1;
4150static int hf_ieee80211_tag_qos_map_set_dscp_exc_up = -1;
4151static int hf_ieee80211_tag_qos_map_set_range = -1;
4152static int hf_ieee80211_tag_qos_map_set_low = -1;
4153static int hf_ieee80211_tag_qos_map_set_high = -1;
4154
4155/* IEEE Std 802.11u-2011 7.3.2.93 */
4156static int hf_ieee80211_tag_adv_proto_resp_len_limit = -1;
4157static int hf_ieee80211_tag_adv_proto_pame_bi = -1;
4158static int hf_ieee80211_tag_adv_proto_id = -1;
4159static int hf_ieee80211_tag_adv_proto_vs_info = -1;
4160
4161/* IEEE Std 802.11u-2011 7.3.2.96 */
4162static int hf_ieee80211_tag_roaming_consortium_num_anqp_oi = -1;
4163static int hf_ieee80211_tag_roaming_consortium_oi1_len = -1;
4164static int hf_ieee80211_tag_roaming_consortium_oi2_len = -1;
4165static int hf_ieee80211_tag_roaming_consortium_oi1 = -1;
4166static int hf_ieee80211_tag_roaming_consortium_oi2 = -1;
4167static int hf_ieee80211_tag_roaming_consortium_oi3 = -1;
4168
4169/* 802.11n 7.3.2.48 */
4170static int hf_ieee80211_hta_cc = -1;
4171static int hf_ieee80211_hta_cap = -1;
4172static int hf_ieee80211_hta_ext_chan_offset = -1;
4173static int hf_ieee80211_hta_rec_tx_width = -1;
4174static int hf_ieee80211_hta_rifs_mode = -1;
4175static int hf_ieee80211_hta_controlled_access = -1;
4176static int hf_ieee80211_hta_service_interval = -1;
4177static int hf_ieee80211_hta_operating_mode = -1;
4178static int hf_ieee80211_hta_non_gf_devices = -1;
4179static int hf_ieee80211_hta_basic_stbc_mcs = -1;
4180static int hf_ieee80211_hta_dual_stbc_protection = -1;
4181static int hf_ieee80211_hta_secondary_beacon = -1;
4182static int hf_ieee80211_hta_lsig_txop_protection = -1;
4183static int hf_ieee80211_hta_pco_active = -1;
4184static int hf_ieee80211_hta_pco_phase = -1;
4185
4186static int hf_ieee80211_antsel = -1;
4187static int hf_ieee80211_antsel_vs = -1;
4188static int hf_ieee80211_antsel_b0 = -1;
4189static int hf_ieee80211_antsel_b1 = -1;
4190static int hf_ieee80211_antsel_b2 = -1;
4191static int hf_ieee80211_antsel_b3 = -1;
4192static int hf_ieee80211_antsel_b4 = -1;
4193static int hf_ieee80211_antsel_b5 = -1;
4194static int hf_ieee80211_antsel_b6 = -1;
4195static int hf_ieee80211_antsel_b7 = -1;
4196
4197static int hf_ieee80211_rsn_version = -1;
4198static int hf_ieee80211_rsn_gcs = -1;
4199static int hf_ieee80211_rsn_gcs_oui = -1;
4200static int hf_ieee80211_rsn_gcs_type = -1;
4201static int hf_ieee80211_rsn_gcs_80211_type = -1;
4202static int hf_ieee80211_rsn_pcs_count = -1;
4203static int hf_ieee80211_rsn_pcs_list = -1;
4204static int hf_ieee80211_rsn_pcs = -1;
4205static int hf_ieee80211_rsn_pcs_oui = -1;
4206static int hf_ieee80211_rsn_pcs_80211_type = -1;
4207static int hf_ieee80211_rsn_pcs_type = -1;
4208static int hf_ieee80211_rsn_akms_count = -1;
4209static int hf_ieee80211_rsn_akms_list = -1;
4210static int hf_ieee80211_rsn_akms = -1;
4211static int hf_ieee80211_rsn_akms_oui = -1;
4212static int hf_ieee80211_rsn_akms_80211_type = -1;
4213static int hf_ieee80211_rsn_akms_type = -1;
4214static int hf_ieee80211_rsn_cap = -1;
4215static int hf_ieee80211_rsn_cap_preauth = -1;
4216static int hf_ieee80211_rsn_cap_no_pairwise = -1;
4217static int hf_ieee80211_rsn_cap_ptksa_replay_counter = -1;
4218static int hf_ieee80211_rsn_cap_gtksa_replay_counter = -1;
4219static int hf_ieee80211_rsn_cap_mfpr = -1;
4220static int hf_ieee80211_rsn_cap_mfpc = -1;
4221static int hf_ieee80211_rsn_cap_jmr = -1;
4222static int hf_ieee80211_rsn_cap_peerkey = -1;
4223static int hf_ieee80211_rsn_pmkid_count = -1;
4224static int hf_ieee80211_rsn_pmkid_list = -1;
4225static int hf_ieee80211_rsn_pmkid = -1;
4226static int hf_ieee80211_rsn_gmcs = -1;
4227static int hf_ieee80211_rsn_gmcs_oui = -1;
4228static int hf_ieee80211_rsn_gmcs_type = -1;
4229static int hf_ieee80211_rsn_gmcs_80211_type = -1;
4230
4231static int hf_ieee80211_wfa_ie_type = -1;
4232static int hf_ieee80211_wfa_ie_wpa_version = -1;
4233static int hf_ieee80211_wfa_ie_wpa_mcs = -1;
4234static int hf_ieee80211_wfa_ie_wpa_mcs_oui = -1;
4235static int hf_ieee80211_wfa_ie_wpa_mcs_type = -1;
4236static int hf_ieee80211_wfa_ie_wpa_mcs_wfa_type = -1;
4237static int hf_ieee80211_wfa_ie_wpa_ucs_count = -1;
4238static int hf_ieee80211_wfa_ie_wpa_ucs_list = -1;
4239static int hf_ieee80211_wfa_ie_wpa_ucs = -1;
4240static int hf_ieee80211_wfa_ie_wpa_ucs_oui = -1;
4241static int hf_ieee80211_wfa_ie_wpa_ucs_wfa_type = -1;
4242static int hf_ieee80211_wfa_ie_wpa_ucs_type = -1;
4243static int hf_ieee80211_wfa_ie_wpa_akms_count = -1;
4244static int hf_ieee80211_wfa_ie_wpa_akms_list = -1;
4245static int hf_ieee80211_wfa_ie_wpa_akms = -1;
4246static int hf_ieee80211_wfa_ie_wpa_akms_oui = -1;
4247static int hf_ieee80211_wfa_ie_wpa_akms_wfa_type = -1;
4248static int hf_ieee80211_wfa_ie_wpa_akms_type = -1;
4249static int hf_ieee80211_wfa_ie_wme_subtype = -1;
4250static int hf_ieee80211_wfa_ie_wme_version = -1;
4251static int hf_ieee80211_wfa_ie_wme_qos_info = -1;
4252static int hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length = -1;
4253static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be = -1;
4254static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk = -1;
4255static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi = -1;
4256static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo = -1;
4257static int hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved = -1;
4258static int hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd = -1;
4259static int hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count = -1;
4260static int hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved = -1;
4261static int hf_ieee80211_wfa_ie_wme_reserved = -1;
4262static int hf_ieee80211_wfa_ie_wme_ac_parameters = -1;
4263static int hf_ieee80211_wfa_ie_wme_acp_aci_aifsn = -1;
4264static int hf_ieee80211_wfa_ie_wme_acp_aci = -1;
4265static int hf_ieee80211_wfa_ie_wme_acp_acm = -1;
4266static int hf_ieee80211_wfa_ie_wme_acp_aifsn = -1;
4267static int hf_ieee80211_wfa_ie_wme_acp_reserved = -1;
4268static int hf_ieee80211_wfa_ie_wme_acp_ecw = -1;
4269static int hf_ieee80211_wfa_ie_wme_acp_ecw_max = -1;
4270static int hf_ieee80211_wfa_ie_wme_acp_ecw_min = -1;
4271static int hf_ieee80211_wfa_ie_wme_acp_cw_max = -1;
4272static int hf_ieee80211_wfa_ie_wme_acp_cw_min = -1;
4273static int hf_ieee80211_wfa_ie_wme_acp_txop_limit = -1;
4274static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo = -1;
4275static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid = -1;
4276static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction = -1;
4277static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb = -1;
4278static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up = -1;
4279static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved = -1;
4280static int hf_ieee80211_wfa_ie_wme_tspec_nor_msdu = -1;
4281static int hf_ieee80211_wfa_ie_wme_tspec_max_msdu = -1;
4282static int hf_ieee80211_wfa_ie_wme_tspec_min_srv = -1;
4283static int hf_ieee80211_wfa_ie_wme_tspec_max_srv = -1;
4284static int hf_ieee80211_wfa_ie_wme_tspec_inact_int = -1;
4285static int hf_ieee80211_wfa_ie_wme_tspec_susp_int = -1;
4286static int hf_ieee80211_wfa_ie_wme_tspec_srv_start = -1;
4287static int hf_ieee80211_wfa_ie_wme_tspec_min_data = -1;
4288static int hf_ieee80211_wfa_ie_wme_tspec_mean_data = -1;
4289static int hf_ieee80211_wfa_ie_wme_tspec_peak_data = -1;
4290static int hf_ieee80211_wfa_ie_wme_tspec_burst_size = -1;
4291static int hf_ieee80211_wfa_ie_wme_tspec_delay_bound = -1;
4292static int hf_ieee80211_wfa_ie_wme_tspec_min_phy = -1;
4293static int hf_ieee80211_wfa_ie_wme_tspec_surplus = -1;
4294static int hf_ieee80211_wfa_ie_wme_tspec_medium = -1;
4295
4296static int hf_ieee80211_aironet_ie_type = -1;
4297static int hf_ieee80211_aironet_ie_dtpc = -1;
4298static int hf_ieee80211_aironet_ie_version = -1;
4299static int hf_ieee80211_aironet_ie_data = -1;
4300static int hf_ieee80211_aironet_ie_qos_reserved = -1;
4301static int hf_ieee80211_aironet_ie_qos_paramset = -1;
4302static int hf_ieee80211_aironet_ie_qos_val = -1;
4303static int hf_ieee80211_aironet_ie_clientmfp = -1;
4304
4305static int hf_ieee80211_vs_nintendo_type = -1;
4306static int hf_ieee80211_vs_nintendo_length = -1;
4307static int hf_ieee80211_vs_nintendo_servicelist = -1;
4308static int hf_ieee80211_vs_nintendo_service = -1;
4309static int hf_ieee80211_vs_nintendo_consoleid = -1;
4310static int hf_ieee80211_vs_nintendo_unknown = -1;
4311
4312static int hf_ieee80211_vs_aruba_subtype = -1;
4313static int hf_ieee80211_vs_aruba_apname = -1;
4314static int hf_ieee80211_vs_aruba_data = -1;
4315
4316static int hf_ieee80211_vs_mikrotik_unknown = -1;
4317static int hf_ieee80211_vs_mikrotik_subitem = -1;
4318static int hf_ieee80211_vs_mikrotik_subtype = -1;
4319static int hf_ieee80211_vs_mikrotik_sublength = -1;
4320static int hf_ieee80211_vs_mikrotik_subdata = -1;
4321
4322static int hf_ieee80211_rsn_ie_pmkid = -1;
4323static int hf_ieee80211_rsn_ie_unknown = -1;
4324
4325static int hf_ieee80211_marvell_ie_type = -1;
4326static int hf_ieee80211_marvell_ie_mesh_subtype = -1;
4327static int hf_ieee80211_marvell_ie_mesh_version = -1;
4328static int hf_ieee80211_marvell_ie_mesh_active_proto_id = -1;
4329static int hf_ieee80211_marvell_ie_mesh_active_metric_id = -1;
4330static int hf_ieee80211_marvell_ie_mesh_cap = -1;
4331static int hf_ieee80211_marvell_ie_data = -1;
4332
4333static int hf_ieee80211_atheros_ie_type = -1;
4334static int hf_ieee80211_atheros_ie_subtype = -1;
4335static int hf_ieee80211_atheros_ie_version = -1;
4336static int hf_ieee80211_atheros_ie_cap_f_turbop = -1;
4337static int hf_ieee80211_atheros_ie_cap_f_comp = -1;
4338static int hf_ieee80211_atheros_ie_cap_f_ff = -1;
4339static int hf_ieee80211_atheros_ie_cap_f_xr = -1;
4340static int hf_ieee80211_atheros_ie_cap_f_ar = -1;
4341static int hf_ieee80211_atheros_ie_cap_f_burst = -1;
4342static int hf_ieee80211_atheros_ie_cap_f_wme = -1;
4343static int hf_ieee80211_atheros_ie_cap_f_boost = -1;
4344static int hf_ieee80211_atheros_ie_advcap_cap = -1;
4345static int hf_ieee80211_atheros_ie_advcap_defkey = -1;
4346static int hf_ieee80211_atheros_ie_xr_info = -1;
4347static int hf_ieee80211_atheros_ie_xr_base_bssid = -1;
4348static int hf_ieee80211_atheros_ie_xr_xr_bssid = -1;
4349static int hf_ieee80211_atheros_ie_xr_xr_beacon = -1;
4350static int hf_ieee80211_atheros_ie_xr_base_cap = -1;
4351static int hf_ieee80211_atheros_ie_xr_xr_cap = -1;
4352static int hf_ieee80211_atheros_ie_data = -1;
4353
4354/*QBSS - Version 1,2,802.11e*/
4355
4356static int hf_ieee80211_qbss2_cal = -1;
4357static int hf_ieee80211_qbss2_gl = -1;
4358static int hf_ieee80211_qbss_cu = -1;
4359static int hf_ieee80211_qbss2_cu = -1;
4360static int hf_ieee80211_qbss_scount = -1;
4361static int hf_ieee80211_qbss2_scount = -1;
4362static int hf_ieee80211_qbss_version = -1;
4363static int hf_ieee80211_qbss_adc = -1;
4364
4365static int hf_ieee80211_tsinfo = -1;
4366static int hf_ieee80211_tsinfo_type = -1;
4367static int hf_ieee80211_tsinfo_tsid = -1;
4368static int hf_ieee80211_tsinfo_dir = -1;
4369static int hf_ieee80211_tsinfo_access = -1;
4370static int hf_ieee80211_tsinfo_agg = -1;
4371static int hf_ieee80211_tsinfo_apsd = -1;
4372static int hf_ieee80211_tsinfo_up = -1;
4373static int hf_ieee80211_tsinfo_ack = -1;
4374static int hf_ieee80211_tsinfo_sched = -1;
4375static int hf_ieee80211_tsinfo_rsv = -1;
4376
4377static const int *ieee80211_tsinfo_fields[] = {
4378 &hf_ieee80211_tsinfo_type,
4379 &hf_ieee80211_tsinfo_tsid,
4380 &hf_ieee80211_tsinfo_dir,
4381 &hf_ieee80211_tsinfo_access,
4382 &hf_ieee80211_tsinfo_agg,
4383 &hf_ieee80211_tsinfo_apsd,
4384 &hf_ieee80211_tsinfo_up,
4385 &hf_ieee80211_tsinfo_ack,
4386 &hf_ieee80211_tsinfo_sched,
4387 &hf_ieee80211_tsinfo_rsv,
4388 NULL((void*)0)
4389};
4390
4391static int hf_ieee80211_tspec_nor_msdu = -1;
4392static int hf_ieee80211_tspec_max_msdu = -1;
4393static int hf_ieee80211_tspec_min_srv = -1;
4394static int hf_ieee80211_tspec_max_srv = -1;
4395static int hf_ieee80211_tspec_inact_int = -1;
4396static int hf_ieee80211_tspec_susp_int = -1;
4397static int hf_ieee80211_tspec_srv_start = -1;
4398static int hf_ieee80211_tspec_min_data = -1;
4399static int hf_ieee80211_tspec_mean_data = -1;
4400static int hf_ieee80211_tspec_peak_data = -1;
4401static int hf_ieee80211_tspec_burst_size = -1;
4402static int hf_ieee80211_tspec_delay_bound = -1;
4403static int hf_ieee80211_tspec_min_phy = -1;
4404static int hf_ieee80211_tspec_surplus = -1;
4405static int hf_ieee80211_tspec_medium = -1;
4406static int hf_ieee80211_tspec_dmg = -1;
4407static int hf_ieee80211_ts_delay = -1;
4408static int hf_ieee80211_tclas_process = -1;
4409static int hf_ieee80211_tag_ext_supp_rates = -1;
4410static int hf_ieee80211_sched_info = -1;
4411static int hf_ieee80211_sched_info_agg = -1;
4412static int hf_ieee80211_sched_info_tsid = -1;
4413static int hf_ieee80211_sched_info_dir = -1;
4414static int hf_ieee80211_sched_srv_start = -1;
4415static int hf_ieee80211_sched_srv_int = -1;
4416static int hf_ieee80211_sched_spec_int = -1;
4417static int hf_ieee80211_tclas_up = -1;
4418static int hf_ieee80211_tclas_class_type = -1;
4419static int hf_ieee80211_tclas_class_mask = -1;
4420static int hf_ieee80211_tclas_class_mask0_src_addr = -1;
4421static int hf_ieee80211_tclas_class_mask0_dst_addr = -1;
4422static int hf_ieee80211_tclas_class_mask0_type = -1;
4423static int hf_ieee80211_tclas_class_mask1_ver = -1;
4424static int hf_ieee80211_tclas_class_mask1_src_ip = -1;
4425static int hf_ieee80211_tclas_class_mask1_dst_ip = -1;
4426static int hf_ieee80211_tclas_class_mask1_src_port = -1;
4427static int hf_ieee80211_tclas_class_mask1_dst_port = -1;
4428static int hf_ieee80211_tclas_class_mask1_ipv4_dscp = -1;
4429static int hf_ieee80211_tclas_class_mask1_ipv4_proto = -1;
4430static int hf_ieee80211_tclas_class_mask1_ipv6_flow = -1;
4431static int hf_ieee80211_tclas_class_mask2_tci = -1;
4432static int hf_ieee80211_tclas_src_mac_addr = -1;
4433static int hf_ieee80211_tclas_dst_mac_addr = -1;
4434static int hf_ieee80211_tclas_ether_type = -1;
4435static int hf_ieee80211_tclas_version = -1;
4436static int hf_ieee80211_tclas_ipv4_src = -1;
4437static int hf_ieee80211_tclas_ipv4_dst = -1;
4438static int hf_ieee80211_tclas_src_port = -1;
4439static int hf_ieee80211_tclas_dst_port = -1;
4440static int hf_ieee80211_tclas_dscp = -1;
4441static int hf_ieee80211_tclas_protocol = -1;
4442static int hf_ieee80211_tclas_ipv6_src = -1;
4443static int hf_ieee80211_tclas_ipv6_dst = -1;
4444static int hf_ieee80211_tclas_flow = -1;
4445static int hf_ieee80211_tclas_tag_type = -1;
4446
4447static int hf_ieee80211_aruba = -1;
4448static int hf_ieee80211_aruba_hb_seq = -1;
4449static int hf_ieee80211_aruba_mtu = -1;
4450
4451static int hf_ieee80211_tag_vendor_oui_type = -1;
4452static int hf_ieee80211_tag_vendor_data = -1;
4453
4454/* IEEE Std 802.11z-2010 7.3.2.62 */
4455static int hf_ieee80211_tag_link_id_bssid = -1;
4456static int hf_ieee80211_tag_link_id_init_sta = -1;
4457static int hf_ieee80211_tag_link_id_resp_sta = -1;
4458
4459/* IEEE Std 802.11z-2010 7.3.2.63 */
4460static int hf_ieee80211_tag_wakeup_schedule_offset = -1;
4461static int hf_ieee80211_tag_wakeup_schedule_interval = -1;
4462static int hf_ieee80211_tag_wakeup_schedule_awake_window_slots = -1;
4463static int hf_ieee80211_tag_wakeup_schedule_max_awake_dur = -1;
4464static int hf_ieee80211_tag_wakeup_schedule_idle_count = -1;
4465
4466/* IEEE Std 802.11z-2010 7.3.2.64 */
4467static int hf_ieee80211_tag_channel_switch_timing_switch_time = -1;
4468static int hf_ieee80211_tag_channel_switch_timing_switch_timeout = -1;
4469
4470/* IEEE Std 802.11z-2010 7.3.2.65 */
4471static int hf_ieee80211_tag_pti_control_tid = -1;
4472static int hf_ieee80211_tag_pti_control_sequence_control = -1;
4473
4474/* IEEE Std 802.11z-2010 7.3.2.66 */
4475static int hf_ieee80211_tag_pu_buffer_status_ac_bk = -1;
4476static int hf_ieee80211_tag_pu_buffer_status_ac_be = -1;
4477static int hf_ieee80211_tag_pu_buffer_status_ac_vi = -1;
4478static int hf_ieee80211_tag_pu_buffer_status_ac_vo = -1;
4479
4480/* IEEE Std 802.11r-2008 7.3.2.49 */
4481static int hf_ieee80211_tag_timeout_int_type = -1;
4482static int hf_ieee80211_tag_timeout_int_value = -1;
4483
4484/* Ethertype 89-0d */
4485static int hf_ieee80211_data_encap_payload_type = -1;
4486
4487static int hf_ieee80211_anqp_wfa_subtype = -1;
4488
4489/* Hotspot 2.0 */
4490static int hf_hs20_indication_dgaf_disabled = -1;
4491static int hf_hs20_indication_pps_mo_id_present = -1;
4492static int hf_hs20_indication_anqp_domain_id_present = -1;
4493static int hf_hs20_indication_release_number = -1;
4494
4495static int hf_hs20_anqp_subtype = -1;
4496static int hf_hs20_anqp_reserved = -1;
4497static int hf_hs20_anqp_payload = -1;
4498static int hf_hs20_anqp_hs_query_list = -1;
4499static int hf_hs20_anqp_hs_capability_list = -1;
4500static int hf_hs20_anqp_ofn_length = -1;
4501static int hf_hs20_anqp_ofn_language = -1;
4502static int hf_hs20_anqp_ofn_name = -1;
4503static int hf_hs20_anqp_wan_metrics_link_status = -1;
4504static int hf_hs20_anqp_wan_metrics_symmetric_link = -1;
4505static int hf_hs20_anqp_wan_metrics_at_capacity = -1;
4506static int hf_hs20_anqp_wan_metrics_reserved = -1;
4507static int hf_hs20_anqp_wan_metrics_downlink_speed = -1;
4508static int hf_hs20_anqp_wan_metrics_uplink_speed = -1;
4509static int hf_hs20_anqp_wan_metrics_downlink_load = -1;
4510static int hf_hs20_anqp_wan_metrics_uplink_load = -1;
4511static int hf_hs20_anqp_wan_metrics_lmd = -1;
4512static int hf_hs20_anqp_cc_proto_ip_proto = -1;
4513static int hf_hs20_anqp_cc_proto_port_num = -1;
4514static int hf_hs20_anqp_cc_proto_status = -1;
4515static int hf_hs20_anqp_nai_hrq_count = -1;
4516static int hf_hs20_anqp_nai_hrq_encoding_type = -1;
4517static int hf_hs20_anqp_nai_hrq_length = -1;
4518static int hf_hs20_anqp_nai_hrq_realm_name = -1;
4519static int hf_hs20_anqp_oper_class_indic = -1;
4520
4521/* IEEE Std 802.11ad */
4522static int hf_ieee80211_block_ack_RBUFCAP = -1;
4523static int hf_ieee80211_cf_response_offset = -1;
4524static int hf_ieee80211_ff_dynamic_allocation = -1;
4525static int hf_ieee80211_ff_TID = -1;
4526static int hf_ieee80211_ff_alloc_type = -1;
4527static int hf_ieee80211_ff_src_aid = -1;
4528static int hf_ieee80211_ff_dest_aid = -1;
4529static int hf_ieee80211_ff_alloc_duration = -1;
4530static int hf_ieee80211_ff_ssw = -1;
4531static int hf_ieee80211_ff_ssw_direction = -1;
4532static int hf_ieee80211_ff_ssw_cdown = -1;
4533static int hf_ieee80211_ff_ssw_sector_id = -1;
4534static int hf_ieee80211_ff_ssw_dmg_ant_id = -1;
4535static int hf_ieee80211_ff_ssw_rxss_len = -1;
4536static int hf_ieee80211_ff_bf = -1;
4537static int hf_ieee80211_ff_bf_train = -1;
4538static int hf_ieee80211_ff_bf_is_init = -1;
4539static int hf_ieee80211_ff_bf_is_resp = -1;
4540static int hf_ieee80211_ff_bf_num_sectors = -1;
4541static int hf_ieee80211_ff_bf_num_rx_dmg_ants = -1;
4542static int hf_ieee80211_ff_bf_rxss_len = -1;
4543static int hf_ieee80211_ff_bf_rxss_rate = -1;
4544static int hf_ieee80211_addr_nav_da = -1;
4545static int hf_ieee80211_addr_nav_sa = -1;
4546static int hf_ieee80211_ff_sswf = -1;
4547static int hf_ieee80211_ff_sswf_num_rx_dmg_ants = -1;
4548static int hf_ieee80211_ff_sswf_poll_required = -1;
4549static int hf_ieee80211_ff_sswf_total_sectors = -1;
4550static int hf_ieee80211_ff_brp = -1;
4551static int hf_ieee80211_ff_brp_L_RX = -1;
4552static int hf_ieee80211_ff_brp_TX_TRN_REQ = -1;
4553static int hf_ieee80211_ff_brp_MID_REQ = -1;
4554static int hf_ieee80211_ff_brp_BC_REQ = -1;
4555static int hf_ieee80211_ff_brp_MID_GRANT = -1;
4556static int hf_ieee80211_ff_brp_BC_GRANT = -1;
4557static int hf_ieee80211_ff_brp_chan_FBCK_CAP = -1;
4558static int hf_ieee80211_ff_brp_tx_sector = -1;
4559static int hf_ieee80211_ff_brp_other_aid = -1;
4560static int hf_ieee80211_ff_brp_tx_antenna = -1;
4561static int hf_ieee80211_ff_blm = -1;
4562static int hf_ieee80211_ff_blm_unit_index = -1;
4563static int hf_ieee80211_ff_blm_maint_value = -1;
4564static int hf_ieee80211_ff_blm_is_master = -1;
4565static int hf_ieee80211_ff_bic = -1;
4566static int hf_ieee80211_ff_bic_cc_present = -1;
4567static int hf_ieee80211_ff_bic_discovery_mode = -1;
4568static int hf_ieee80211_ff_bic_next_beacon = -1;
4569static int hf_ieee80211_ff_bic_ati_present = -1;
4570static int hf_ieee80211_ff_bic_abft_len = -1;
4571static int hf_ieee80211_ff_bic_fss = -1;
4572static int hf_ieee80211_ff_bic_is_resp = -1;
4573static int hf_ieee80211_ff_bic_next_abft = -1;
4574static int hf_ieee80211_ff_bic_frag_txss = -1;
4575static int hf_ieee80211_ff_bic_txss_span = -1;
4576static int hf_ieee80211_ff_bic_NBI_abft = -1;
4577static int hf_ieee80211_ff_bic_abft_count = -1;
4578static int hf_ieee80211_ff_bic_nabft = -1;
4579static int hf_ieee80211_ff_bic_pcp = -1;
4580static int hf_ieee80211_ff_dmg_params = -1;
4581static int hf_ieee80211_ff_dmg_params_bss = -1;
4582static int hf_ieee80211_ff_dmg_params_cbap_only = -1;
4583static int hf_ieee80211_ff_dmg_params_cbap_src = -1;
4584static int hf_ieee80211_ff_dmg_params_privacy = -1;
4585static int hf_ieee80211_ff_dmg_params_policy = -1;
4586static int hf_ieee80211_ff_cc = -1;
4587static int hf_ieee80211_ff_cc_abft_resp_addr = -1;
4588static int hf_ieee80211_ff_cc_sp_duration = -1;
4589static int hf_ieee80211_ff_cc_cluster_id = -1;
4590static int hf_ieee80211_ff_cc_role = -1;
4591static int hf_ieee80211_ff_cc_max_mem = -1;
4592static int hf_ieee80211_ff_dmg_action_code = -1;
4593static int hf_ieee80211_ff_dmg_pwr_mgmt = -1;
4594static int hf_ieee80211_ff_subject_address = -1;
4595static int hf_ieee80211_ff_handover_reason = -1;
4596static int hf_ieee80211_ff_handover_remaining_bi = -1;
4597static int hf_ieee80211_ff_handover_result = -1;
4598static int hf_ieee80211_ff_handover_reject_reason = -1;
4599static int hf_ieee80211_ff_destination_reds_aid = -1;
4600static int hf_ieee80211_ff_destination_aid = -1;
4601static int hf_ieee80211_ff_realy_aid = -1;
4602static int hf_ieee80211_ff_source_aid = -1;
4603static int hf_ieee80211_ff_timing_offset = -1;
4604static int hf_ieee80211_ff_sampling_frequency_offset = -1;
4605static int hf_ieee80211_ff_relay_operation_type = -1;
4606static int hf_ieee80211_ff_peer_sta_aid = -1;
4607static int hf_ieee80211_ff_snr = -1;
4608static int hf_ieee80211_ff_internal_angle = -1;
4609static int hf_ieee80211_ff_recommend = -1;
4610static int hf_ieee80211_ff_unprotected_dmg_action_code = -1;
4611static int hf_ieee80211_ff_fst_action_code = -1;
4612static int hf_ieee80211_ff_llt = -1;
4613static int hf_ieee80211_ff_fsts_id = -1;
4614static int hf_ieee80211_ff_mmpdu_len = -1;
4615static int hf_ieee80211_ff_mmpdu_ctrl = -1;
4616static int hf_ieee80211_ff_oct_mmpdu = -1;
4617#if 0
4618static int hf_ieee80211_ff_rcsi = -1;
4619static int hf_ieee80211_ff_rcsi_aid = -1;
4620#endif
4621static int hf_ieee80211_ff_band_id = -1;
4622static int hf_ieee80211_tag_relay_support = -1;
4623static int hf_ieee80211_tag_relay_use = -1;
4624static int hf_ieee80211_tag_relay_permission = -1;
4625static int hf_ieee80211_tag_AC_power = -1;
4626static int hf_ieee80211_tag_relay_prefer = -1;
4627static int hf_ieee80211_tag_duplex = -1;
4628static int hf_ieee80211_tag_cooperation = -1;
4629static int hf_ieee80211_tag_move = -1;
4630static int hf_ieee80211_tag_size = -1;
4631static int hf_ieee80211_tag_tbtt_offset = -1;
4632static int hf_ieee80211_tag_bi_duration = -1;
4633static int hf_ieee80211_tag_dmg_capa_sta_addr = -1;
4634static int hf_ieee80211_tag_dmg_capa_aid = -1;
4635static int hf_ieee80211_tag_reverse_direction = -1;
4636static int hf_ieee80211_tag_hlts = -1;
4637static int hf_ieee80211_tag_tpc = -1;
4638static int hf_ieee80211_tag_spsh = -1;
4639static int hf_ieee80211_tag_rx_antenna = -1;
4640static int hf_ieee80211_tag_fast_link = -1;
4641static int hf_ieee80211_tag_num_sectors = -1;
4642static int hf_ieee80211_tag_rxss_length = -1;
4643static int hf_ieee80211_tag_reciprocity = -1;
4644static int hf_ieee80211_tag_max_ampdu_exp = -1;
4645static int hf_ieee80211_tag_min_mpdu_sapcing = -1;
4646static int hf_ieee80211_tag_ba_flow_control = -1;
4647static int hf_ieee80211_tag_max_sc_rx_mcs = -1;
4648static int hf_ieee80211_tag_max_ofdm_rx_mcs = -1;
4649static int hf_ieee80211_tag_max_sc_tx_mcs = -1;
4650static int hf_ieee80211_tag_max_ofdm_tx_mcs = -1;
4651static int hf_ieee80211_tag_low_power_supported = -1;
4652static int hf_ieee80211_tag_code_rate = -1;
4653static int hf_ieee80211_tag_dtp = -1;
4654static int hf_ieee80211_tag_appdu_supp = -1;
4655static int hf_ieee80211_tag_heartbeat = -1;
4656static int hf_ieee80211_tag_other_aid = -1;
4657static int hf_ieee80211_tag_pattern_recip = -1;
4658static int hf_ieee80211_tag_heartbeat_elapsed = -1;
4659static int hf_ieee80211_tag_grant_ack_supp = -1;
4660static int hf_ieee80211_tag_RXSSTxRate_supp = -1;
4661static int hf_ieee80211_tag_pcp_tddti = -1;
4662static int hf_ieee80211_tag_pcp_PSA = -1;
4663static int hf_ieee80211_tag_pcp_handover = -1;
4664static int hf_ieee80211_tag_pcp_max_assoc = -1;
4665static int hf_ieee80211_tag_pcp_power_src = -1;
4666static int hf_ieee80211_tag_pcp_decenter = -1;
4667static int hf_ieee80211_tag_pcp_forwarding = -1;
4668static int hf_ieee80211_tag_pcp_center = -1;
4669static int hf_ieee80211_tag_PSRSI = -1;
4670static int hf_ieee80211_tag_min_BHI_duration = -1;
4671static int hf_ieee80211_tag_brdct_sta_info_dur = -1;
4672static int hf_ieee80211_tag_assoc_resp_confirm_time = -1;
4673static int hf_ieee80211_tag_min_pp_duration = -1;
4674static int hf_ieee80211_tag_SP_idle_timeout = -1;
4675static int hf_ieee80211_tag_max_lost_beacons = -1;
4676static int hf_ieee80211_tag_type = -1;
4677static int hf_ieee80211_tag_tap1 = -1;
4678static int hf_ieee80211_tag_state1 = -1;
4679static int hf_ieee80211_tag_tap2 = -1;
4680static int hf_ieee80211_tag_state2 = -1;
4681static int hf_ieee80211_tag_allocation_id = -1;
4682static int hf_ieee80211_tag_allocation_type = -1;
4683static int hf_ieee80211_tag_pseudo_static = -1;
4684static int hf_ieee80211_tag_truncatable = -1;
4685static int hf_ieee80211_tag_extendable = -1;
4686static int hf_ieee80211_tag_pcp_active = -1;
4687static int hf_ieee80211_tag_lp_sc_used = -1;
4688static int hf_ieee80211_tag_src_aid = -1;
4689static int hf_ieee80211_tag_dest_aid = -1;
4690static int hf_ieee80211_tag_alloc_start = -1;
4691static int hf_ieee80211_tag_alloc_block_duration = -1;
4692static int hf_ieee80211_tag_num_blocks = -1;
4693static int hf_ieee80211_tag_alloc_block_period = -1;
4694static int hf_ieee80211_tag_aid = -1;
4695static int hf_ieee80211_tag_cbap = -1;
4696static int hf_ieee80211_tag_pp_avail = -1;
4697static int hf_ieee80211_tag_next_ati_start_time = -1;
4698static int hf_ieee80211_tag_next_ati_duration = -1;
4699static int hf_ieee80211_tag_old_bssid = -1;
4700static int hf_ieee80211_tag_new_pcp_addr = -1;
4701static int hf_ieee80211_tag_bssid = -1;
4702static int hf_ieee80211_tag_duplex_relay = -1;
4703static int hf_ieee80211_tag_cooperation_relay = -1;
4704static int hf_ieee80211_tag_tx_mode = -1;
4705static int hf_ieee80211_tag_link_change_interval = -1;
4706static int hf_ieee80211_tag_data_sensing_time = -1;
4707static int hf_ieee80211_tag_first_period = -1;
4708static int hf_ieee80211_tag_second_period = -1;
4709static int hf_ieee80211_tag_initiator = -1;
4710static int hf_ieee80211_tag_tx_train_res = -1;
4711static int hf_ieee80211_tag_rx_train_res = -1;
4712static int hf_ieee80211_tag_tx_trn_ok = -1;
4713static int hf_ieee80211_tag_txss_fbck_req = -1;
4714static int hf_ieee80211_tag_bs_fbck = -1;
4715static int hf_ieee80211_tag_bs_fbck_antenna_id = -1;
4716static int hf_ieee80211_tag_snr_requested = -1;
4717static int hf_ieee80211_tag_channel_measurement_requested = -1;
4718static int hf_ieee80211_tag_number_of_taps_requested = -1;
4719static int hf_ieee80211_tag_sector_id_order_req = -1;
4720static int hf_ieee80211_tag_snr_present = -1;
4721static int hf_ieee80211_tag_channel_measurement_present = -1;
4722static int hf_ieee80211_tag_tap_delay_present = -1;
4723static int hf_ieee80211_tag_number_of_taps_present = -1;
4724static int hf_ieee80211_tag_number_of_measurement = -1;
4725static int hf_ieee80211_tag_sector_id_order_present = -1;
4726static int hf_ieee80211_tag_number_of_beams = -1;
4727static int hf_ieee80211_tag_mid_extension = -1;
4728static int hf_ieee80211_tag_capability_request = -1;
4729static int hf_ieee80211_tag_nextpcp_list = -1;
4730static int hf_ieee80211_tag_nextpcp_token = -1;
4731static int hf_ieee80211_tag_reamaining_BI = -1;
4732static int hf_ieee80211_tag_request_token = -1;
4733static int hf_ieee80211_tag_bi_start_time = -1;
4734static int hf_ieee80211_tag_sleep_cycle = -1;
4735static int hf_ieee80211_tag_num_awake_bis = -1;
4736static int hf_ieee80211_tag_tspec_allocation_id = -1;
4737static int hf_ieee80211_tag_tspec_allocation_type = -1;
4738static int hf_ieee80211_tag_tspec_allocation_format = -1;
4739static int hf_ieee80211_tag_tspec_pseudo_static = -1;
4740static int hf_ieee80211_tag_tspec_truncatable = -1;
4741static int hf_ieee80211_tag_tspec_extendable = -1;
4742static int hf_ieee80211_tag_tspec_lp_sc_used = -1;
4743static int hf_ieee80211_tag_tspec_up = -1;
4744static int hf_ieee80211_tag_tspec_dest_aid = -1;
4745static int hf_ieee80211_tag_tspec_allocation_period = -1;
4746static int hf_ieee80211_tag_tspec_min_allocation = -1;
4747static int hf_ieee80211_tag_tspec_max_allocation = -1;
4748static int hf_ieee80211_tag_tspec_min_duration = -1;
4749static int hf_ieee80211_tag_tspec_num_of_constraints = -1;
4750static int hf_ieee80211_tag_tspec_tsconst_start_time = -1;
4751static int hf_ieee80211_tag_tspec_tsconst_duration = -1;
4752static int hf_ieee80211_tag_tspec_tsconst_period = -1;
4753static int hf_ieee80211_tag_tspec_tsconst_interferer_mac = -1;
4754static int hf_ieee80211_tag_channel_measurement_feedback_realtive_I = -1;
4755static int hf_ieee80211_tag_channel_measurement_feedback_realtive_Q = -1;
4756static int hf_ieee80211_tag_channel_measurement_feedback_tap_delay = -1;
4757static int hf_ieee80211_tag_channel_measurement_feedback_sector_id = -1;
4758static int hf_ieee80211_tag_channel_measurement_feedback_antenna_id = -1;
4759static int hf_ieee80211_tag_awake_window = -1;
4760static int hf_ieee80211_tag_addba_ext_no_frag = -1;
4761static int hf_ieee80211_tag_multi_band_ctrl_sta_role = -1;
4762static int hf_ieee80211_tag_multi_band_ctrl_addr_present = -1;
4763static int hf_ieee80211_tag_multi_band_ctrl_cipher_present = -1;
4764static int hf_ieee80211_tag_multi_band_oper_class = -1;
4765static int hf_ieee80211_tag_multi_band_channel_number = -1;
4766static int hf_ieee80211_tag_multi_band_tsf_offset = -1;
4767static int hf_ieee80211_tag_multi_band_conn_ap = -1;
4768static int hf_ieee80211_tag_multi_band_conn_pcp = -1;
4769static int hf_ieee80211_tag_multi_band_conn_dls = -1;
4770static int hf_ieee80211_tag_multi_band_conn_tdls = -1;
4771static int hf_ieee80211_tag_multi_band_conn_ibss = -1;
4772static int hf_ieee80211_tag_multi_band_fst_timeout = -1;
4773static int hf_ieee80211_tag_multi_band_sta_mac = -1;
4774static int hf_ieee80211_tag_activity = -1;
4775static int hf_ieee80211_tag_dmg_link_adapt_mcs = -1;
4776static int hf_ieee80211_tag_dmg_link_adapt_link_margin = -1;
4777static int hf_ieee80211_tag_ref_timestamp = -1;
4778static int hf_ieee80211_tag_switching_stream_non_qos = -1;
4779static int hf_ieee80211_tag_switching_stream_param_num = -1;
4780static int hf_ieee80211_tag_switching_stream_old_tid = -1;
4781static int hf_ieee80211_tag_switching_stream_old_direction = -1;
4782static int hf_ieee80211_tag_switching_stream_new_tid = -1;
4783static int hf_ieee80211_tag_switching_stream_new_direction = -1;
4784static int hf_ieee80211_tag_switching_stream_new_valid_id = -1;
4785static int hf_ieee80211_tag_switching_stream_llt_type = -1;
4786
4787static int hf_ieee80211_mysterious_olpc_stuff = -1;
4788
4789/* ************************************************************************* */
4790/* Protocol trees */
4791/* ************************************************************************* */
4792static gint ett_80211 = -1;
4793static gint ett_proto_flags = -1;
4794static gint ett_cap_tree = -1;
4795static gint ett_fc_tree = -1;
4796static gint ett_cntrl_wrapper_fc = -1;
4797static gint ett_cntrl_wrapper_payload = -1;
4798static gint ett_fragments = -1;
4799static gint ett_fragment = -1;
4800static gint ett_block_ack = -1;
4801static gint ett_block_ack_bitmap = -1;
4802static gint ett_ath_cap_tree = -1;
4803
4804static gint ett_80211_mgt = -1;
4805static gint ett_fixed_parameters = -1;
4806static gint ett_tagged_parameters = -1;
4807static gint ett_tag_bmapctl_tree = -1;
4808static gint ett_tag_country_fnm_tree = -1;
4809static gint ett_tag_country_rcc_tree = -1;
4810static gint ett_qos_parameters = -1;
4811static gint ett_qos_ps_buf_state = -1;
4812static gint ett_wep_parameters = -1;
4813static gint ett_msh_control = -1;
4814static gint ett_hwmp_targ_flags_tree = -1;
4815static gint ett_mesh_chswitch_flag_tree = -1;
4816static gint ett_mesh_config_cap_tree = -1;
4817static gint ett_mesh_formation_info_tree = -1;
4818
4819static gint ett_rsn_gcs_tree = -1;
4820static gint ett_rsn_pcs_tree = -1;
4821static gint ett_rsn_sub_pcs_tree = -1;
4822static gint ett_rsn_akms_tree = -1;
4823static gint ett_rsn_sub_akms_tree = -1;
4824static gint ett_rsn_cap_tree = -1;
4825static gint ett_rsn_pmkid_tree = -1;
4826static gint ett_rsn_gmcs_tree = -1;
4827
4828static gint ett_wpa_mcs_tree = -1;
4829static gint ett_wpa_ucs_tree = -1;
4830static gint ett_wpa_sub_ucs_tree = -1;
4831static gint ett_wpa_akms_tree = -1;
4832static gint ett_wpa_sub_akms_tree = -1;
4833static gint ett_wme_ac = -1;
4834static gint ett_wme_aci_aifsn = -1;
4835static gint ett_wme_ecw = -1;
4836static gint ett_wme_qos_info = -1;
4837
4838static gint ett_ht_cap_tree = -1;
4839static gint ett_ampduparam_tree = -1;
4840static gint ett_mcsset_tree = -1;
4841static gint ett_mcsbit_tree = -1;
4842static gint ett_htex_cap_tree = -1;
4843static gint ett_txbf_tree = -1;
4844static gint ett_antsel_tree = -1;
4845static gint ett_hta_cap_tree = -1;
4846static gint ett_hta_cap1_tree = -1;
4847static gint ett_hta_cap2_tree = -1;
4848
4849static gint ett_htc_tree = -1;
4850static gint ett_mfb_subtree = -1;
4851static gint ett_lac_subtree = -1;
4852
4853static gint ett_vht_cap_tree = -1;
4854static gint ett_vht_mcsset_tree = -1;
4855static gint ett_vht_rx_mcsbit_tree = -1;
4856static gint ett_vht_tx_mcsbit_tree = -1;
4857static gint ett_vht_basic_mcsbit_tree = -1;
4858static gint ett_vht_op_tree = -1;
4859static gint ett_vht_tpe_info_tree = -1;
4860
4861static gint ett_vht_ndp_annc_token_tree = -1;
4862static gint ett_vht_ndp_annc_sta_info_tree = -1;
4863
4864static gint ett_ff_vhtmimo_cntrl = -1;
4865static gint ett_ff_vhtmimo_beamforming_report = -1;
4866static gint ett_ff_vhtmimo_beamforming_report_snr = -1;
4867static gint ett_ff_vhtmimo_beamforming_report_feedback_matrices = -1;
4868
4869static gint ett_vht_grpidmgmt = -1;
4870
4871static gint ett_ht_info_delimiter1_tree = -1;
4872static gint ett_ht_info_delimiter2_tree = -1;
4873static gint ett_ht_info_delimiter3_tree = -1;
4874
4875static gint ett_tag_measure_request_mode_tree = -1;
4876static gint ett_tag_measure_request_type_tree = -1;
4877static gint ett_tag_measure_report_mode_tree = -1;
4878static gint ett_tag_measure_report_type_tree = -1;
4879static gint ett_tag_measure_report_basic_map_tree = -1;
4880static gint ett_tag_measure_report_rpi_tree = -1;
4881static gint ett_tag_measure_report_frame_tree = -1;
4882static gint ett_tag_measure_reported_frame_tree = -1;
4883static gint ett_tag_bss_bitmask_tree = -1;
4884static gint ett_tag_dfs_map_tree = -1;
4885static gint ett_tag_erp_info_tree = -1;
4886static gint ett_tag_ex_cap1 = -1;
4887static gint ett_tag_ex_cap2 = -1;
4888static gint ett_tag_ex_cap3 = -1;
4889static gint ett_tag_ex_cap4 = -1;
4890static gint ett_tag_ex_cap5 = -1;
4891static gint ett_tag_ex_cap6 = -1;
4892static gint ett_tag_ex_cap7 = -1;
4893static gint ett_tag_ex_cap8 = -1;
4894static gint ett_tag_ex_cap9 = -1;
4895
4896static gint ett_tag_rm_cap1 = -1;
4897static gint ett_tag_rm_cap2 = -1;
4898static gint ett_tag_rm_cap3 = -1;
4899static gint ett_tag_rm_cap4 = -1;
4900static gint ett_tag_rm_cap5 = -1;
4901static gint ett_tag_tclas_mask_tree = -1;
4902
4903static gint ett_tag_supported_channels = -1;
4904
4905static gint ett_tag_neighbor_report_bssid_info_tree = -1;
4906static gint ett_tag_neighbor_report_bssid_info_capability_tree = -1;
4907static gint ett_tag_neighbor_report_sub_tag_tree = -1;
4908
4909static gint ett_tag_wapi_param_set_akm_tree = -1;
4910static gint ett_tag_wapi_param_set_ucast_tree = -1;
4911static gint ett_tag_wapi_param_set_mcast_tree = -1;
4912static gint ett_tag_wapi_param_set_preauth_tree = -1;
4913
4914static gint ett_tag_time_adv_tree = -1;
4915
4916static gint ett_ff_ba_param_tree = -1;
4917static gint ett_ff_ba_ssc_tree = -1;
4918static gint ett_ff_delba_param_tree = -1;
4919static gint ett_ff_qos_info = -1;
4920static gint ett_ff_sm_pwr_save = -1;
4921static gint ett_ff_psmp_param_set = -1;
4922static gint ett_ff_mimo_cntrl = -1;
4923static gint ett_ff_ant_sel = -1;
4924static gint ett_mimo_report = -1;
4925static gint ett_ff_chan_switch_announce = -1;
4926static gint ett_ff_ht_info = -1;
4927static gint ett_ff_psmp_sta_info = -1;
4928
4929static gint ett_tpc = -1;
4930
4931static gint ett_msdu_aggregation_parent_tree = -1;
4932static gint ett_msdu_aggregation_subframe_tree = -1;
4933
4934static gint ett_80211_mgt_ie = -1;
4935static gint ett_tsinfo_tree = -1;
4936static gint ett_sched_tree = -1;
4937
4938static gint ett_fcs = -1;
4939
4940static gint ett_adv_proto = -1;
4941static gint ett_adv_proto_tuple = -1;
4942static gint ett_gas_query = -1;
4943static gint ett_gas_anqp = -1;
4944static gint ett_nai_realm = -1;
4945static gint ett_nai_realm_eap = -1;
4946static gint ett_tag_ric_data_desc_ie = -1;
4947static gint ett_anqp_vendor_capab = -1;
4948
4949static gint ett_hs20_cc_proto_port_tuple = -1;
4950
4951static gint ett_ssid_list = -1;
4952
4953static gint ett_nintendo = -1;
4954
4955static gint ett_mikrotik = -1;
4956
4957static gint ett_qos_map_set_exception = -1;
4958static gint ett_qos_map_set_range = -1;
4959
4960static expert_field ei_ieee80211_bad_length = EI_INIT{-1, -1};
4961static expert_field ei_ieee80211_inv_val = EI_INIT{-1, -1};
4962static expert_field ei_ieee80211_vht_tpe_pwr_info_count = EI_INIT{-1, -1};
4963static expert_field ei_ieee80211_ff_query_response_length = EI_INIT{-1, -1};
4964static expert_field ei_ieee80211_ff_anqp_nai_realm_eap_len = EI_INIT{-1, -1};
4965static expert_field ei_hs20_anqp_nai_hrq_length = EI_INIT{-1, -1};
4966static expert_field ei_ieee80211_extra_data = EI_INIT{-1, -1};
4967static expert_field ei_ieee80211_tag_data = EI_INIT{-1, -1};
4968static expert_field ei_ieee80211_tdls_setup_confirm_malformed = EI_INIT{-1, -1};
4969static expert_field ei_ieee80211_ff_anqp_nai_field_len = EI_INIT{-1, -1};
4970static expert_field ei_ieee80211_rsn_pcs_count = EI_INIT{-1, -1};
4971static expert_field ei_ieee80211_tag_measure_request_unknown = EI_INIT{-1, -1};
4972static expert_field ei_ieee80211_tag_measure_request_beacon_unknown = EI_INIT{-1, -1};
4973static expert_field ei_ieee80211_tag_measure_report_unknown = EI_INIT{-1, -1};
4974static expert_field ei_ieee80211_tag_number = EI_INIT{-1, -1};
4975static expert_field ei_ieee80211_ff_anqp_info_length = EI_INIT{-1, -1};
4976static expert_field ei_hs20_anqp_ofn_length = EI_INIT{-1, -1};
4977static expert_field ei_ieee80211_tdls_setup_response_malformed = EI_INIT{-1, -1};
4978static expert_field ei_ieee80211_ff_anqp_capability = EI_INIT{-1, -1};
4979static expert_field ei_ieee80211_not_enough_room_for_anqp_header = EI_INIT{-1, -1};
4980static expert_field ei_ieee80211_ff_query_request_length = EI_INIT{-1, -1};
4981static expert_field ei_ieee80211_wfa_ie_wme_qos_info_bad_ftype = EI_INIT{-1, -1};
4982static expert_field ei_ieee80211_qos_info_bad_ftype = EI_INIT{-1, -1};
4983static expert_field ei_ieee80211_qos_bad_aifsn = EI_INIT{-1, -1};
4984static expert_field ei_ieee80211_pmkid_count_too_large = EI_INIT{-1, -1};
4985static expert_field ei_ieee80211_ff_anqp_venue_length = EI_INIT{-1, -1};
4986static expert_field ei_ieee80211_ff_anqp_roaming_consortium_oi_len = EI_INIT{-1, -1};
4987static expert_field ei_ieee80211_tag_length = EI_INIT{-1, -1};
4988static expert_field ei_ieee80211_missing_data = EI_INIT{-1, -1};
4989static expert_field ei_ieee80211_rsn_pmkid_count = EI_INIT{-1, -1};
4990static expert_field ei_ieee80211_fc_retry = EI_INIT{-1, -1};
4991static expert_field ei_ieee80211_tag_wnm_sleep_mode_no_key_data = EI_INIT{-1, -1};
4992static expert_field ei_ieee80211_dmg_subtype = EI_INIT{-1, -1};
4993static expert_field ei_ieee80211_vht_action = EI_INIT{-1, -1};
4994static expert_field ei_ieee80211_mesh_peering_unexpected = EI_INIT{-1, -1};
4995
4996/* 802.11ad trees */
4997static gint ett_dynamic_alloc_tree = -1;
4998static gint ett_ssw_tree = -1;
4999static gint ett_bf_tree = -1;
5000static gint ett_sswf_tree = -1;
5001static gint ett_brp_tree = -1;
5002static gint ett_blm_tree = -1;
5003static gint ett_bic_tree = -1;
5004static gint ett_dmg_params_tree = -1;
5005static gint ett_cc_tree = -1;
5006static gint ett_rcsi_tree = -1;
5007static gint ett_80211_ext = -1;
5008static gint ett_allocation_tree = -1;
5009static gint ett_sta_info = -1;
5010
5011static const fragment_items frag_items = {
5012 &ett_fragment,
5013 &ett_fragments,
5014 &hf_ieee80211_fragments,
5015 &hf_ieee80211_fragment,
5016 &hf_ieee80211_fragment_overlap,
5017 &hf_ieee80211_fragment_overlap_conflict,
5018 &hf_ieee80211_fragment_multiple_tails,
5019 &hf_ieee80211_fragment_too_long_fragment,
5020 &hf_ieee80211_fragment_error,
5021 &hf_ieee80211_fragment_count,
5022 &hf_ieee80211_reassembled_in,
5023 &hf_ieee80211_reassembled_length,
5024 /* Reassembled data field */
5025 NULL((void*)0),
5026 "fragments"
5027};
5028
5029static const enum_val_t wlan_ignore_prot_options[] = {
5030 { "no", "No", WLAN_IGNORE_PROT_NO0 },
5031 { "without_iv", "Yes - without IV", WLAN_IGNORE_PROT_WO_IV1 },
5032 { "with_iv", "Yes - with IV", WLAN_IGNORE_PROT_W_IV2 },
5033 { NULL((void*)0), NULL((void*)0), 0 }
5034};
5035
5036static int wlan_address_type = -1;
5037static int wlan_bssid_address_type = -1;
5038
5039static address bssid_broadcast;
5040gboolean
5041is_broadcast_bssid(const address *bssid) {
5042 return addresses_equal(&bssid_broadcast, bssid);
5043}
5044
5045static dissector_handle_t ieee80211_handle;
5046static dissector_handle_t wlan_withoutfcs_handle;
5047static dissector_handle_t llc_handle;
5048static dissector_handle_t ipx_handle;
5049static dissector_handle_t eth_withoutfcs_handle;
5050
5051static int wlan_tap = -1;
5052
5053static const value_string access_network_type_vals[] = {
5054 { 0, "Private network" },
5055 { 1, "Private network with guest access" },
5056 { 2, "Chargeable public network" },
5057 { 3, "Free public network" },
5058 { 4, "Personal device network" },
5059 { 5, "Emergency services only network" },
5060 { 14, "Test or experimental" },
5061 { 15, "Wildcard" },
5062 { 0, NULL((void*)0) }
5063};
5064
5065static const value_string adv_proto_id_vals[] = {
5066 { 0, "Access Network Query Protocol"},
5067 { 1, "MIH Information Service"},
5068 { 2, "MIH Command and Event Services Capability Discovery"},
5069 { 3, "Emergency Alert System (EAS)"},
5070 { 4, "Location-to-Service Translation Protocol"},
5071 {221, "Vendor Specific"},
5072 {0, NULL((void*)0)}
5073};
5074
5075static const value_string timeout_int_types[] = {
5076 {1, "Reassociation deadline interval (TUs)"},
5077 {2, "Key lifetime interval (seconds)"},
5078 {3, "Association Comeback time (TUs)"},
5079 {4, "Time to start (TUs)"},
5080 {0, NULL((void*)0)}
5081};
5082
5083static const value_string tdls_action_codes[] = {
5084 {TDLS_SETUP_REQUEST0, "TDLS Setup Request"},
5085 {TDLS_SETUP_RESPONSE1, "TDLS Setup Response"},
5086 {TDLS_SETUP_CONFIRM2, "TDLS Setup Confirm"},
5087 {TDLS_TEARDOWN3, "TDLS Teardown"},
5088 {TDLS_PEER_TRAFFIC_INDICATION4, "TDLS Peer Traffic Indication"},
5089 {TDLS_CHANNEL_SWITCH_REQUEST5, "TDLS Channel Switch Request"},
5090 {TDLS_CHANNEL_SWITCH_RESPONSE6, "TDLS Channel Switch Response"},
5091 {TDLS_PEER_PSM_REQUEST7, "TDLS Peer PSM Request"},
5092 {TDLS_PEER_PSM_RESPONSE8, "TDLS Peer PSM Response"},
5093 {TDLS_PEER_TRAFFIC_RESPONSE9, "TDLS Peer Traffic Response"},
5094 {TDLS_DISCOVERY_REQUEST10, "TDLS Discovery Request"},
5095 {0, NULL((void*)0)}
5096};
5097static value_string_ext tdls_action_codes_ext = VALUE_STRING_EXT_INIT(tdls_action_codes){ _try_val_to_str_ext_init, 0, (sizeof (tdls_action_codes) / sizeof
((tdls_action_codes)[0]))-1, tdls_action_codes, "tdls_action_codes"
}
;
5098
5099static const value_string rm_action_codes[] = {
5100 {RM_ACTION_RADIO_MEASUREMENT_REQUEST0, "Radio Measurement Request"},
5101 {RM_ACTION_RADIO_MEASUREMENT_REPORT1, "Radio Measurement Report"},
5102 {RM_ACTION_LINK_MEASUREMENT_REQUEST2, "Link Measurement Request"},
5103 {RM_ACTION_LINK_MEASUREMENT_REPORT3, "Link Measurement Report"},
5104 {RM_ACTION_NEIGHBOR_REPORT_REQUEST4, "Neighbor Report Request"},
5105 {RM_ACTION_NEIGHBOR_REPORT_RESPONSE5, "Neighbor Report Response"},
5106 {0, NULL((void*)0)}
5107};
5108static value_string_ext rm_action_codes_ext = VALUE_STRING_EXT_INIT(rm_action_codes){ _try_val_to_str_ext_init, 0, (sizeof (rm_action_codes) / sizeof
((rm_action_codes)[0]))-1, rm_action_codes, "rm_action_codes"
}
;
5109
5110static const value_string number_of_taps_values[] = {
5111 {0x0, "1 tap"},
5112 {0x1, "5 taps"},
5113 {0x2, "15 taps"},
5114 {0x3, "63 taps"},
5115 {0, NULL((void*)0)}
5116};
5117
5118AIRPDCAP_CONTEXT airpdcap_ctx;
5119
5120#define PSMP_STA_INFO_BROADCAST0 0
5121#define PSMP_STA_INFO_MULTICAST1 1
5122#define PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED2 2
5123
5124#define PSMP_STA_INFO_FLAG_TYPE0x00000003 0x00000003
5125#define PSMP_STA_INFO_FLAG_DTT_START0x00001FFC 0x00001FFC
5126#define PSMP_STA_INFO_FLAG_DTT_DURATION0x001FE000 0x001FE000
5127
5128#define PSMP_STA_INFO_FLAG_STA_ID0x001FFFE0 0x001FFFE0
5129
5130#define PSMP_STA_INFO_FLAG_UTT_START0x0000FFE0 0x0000FFE0
5131#define PSMP_STA_INFO_FLAG_UTT_DURATION0x03FF0000 0x03FF0000
5132
5133#define PSMP_STA_INFO_FLAG_IA_RESERVED0xFC000000 0xFC000000
5134
5135static const value_string ff_psmp_sta_info_flags[] = {
5136 { PSMP_STA_INFO_BROADCAST0, "Broadcast"},
5137 { PSMP_STA_INFO_MULTICAST1, "Multicast"},
5138 { PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED2, "Individually Addressed"},
5139 {0, NULL((void*)0)}
5140};
5141
5142static const char*
5143wlan_conv_get_filter_type(conv_item_t* conv, conv_filter_type_e filter)
5144{
5145 if ((filter == CONV_FT_SRC_ADDRESS) && (conv->src_address.type == wlan_address_type))
5146 return "wlan.sa";
5147
5148 if ((filter == CONV_FT_DST_ADDRESS) && (conv->dst_address.type == wlan_address_type))
5149 return "wlan.da";
5150
5151 if ((filter == CONV_FT_ANY_ADDRESS) && (conv->src_address.type == wlan_address_type))
5152 return "wlan.addr";
5153
5154 return CONV_FILTER_INVALID"INVALID";
5155}
5156
5157static ct_dissector_info_t wlan_ct_dissector_info = {&wlan_conv_get_filter_type};
5158
5159static int
5160wlan_conversation_packet(void *pct, packet_info *pinfo, epan_dissect_t *edt _U___attribute__((unused)), const void *vip)
5161{
5162 conv_hash_t *hash = (conv_hash_t*) pct;
5163 const wlan_hdr_t *whdr=(const wlan_hdr_t *)vip;
5164
5165 add_conversation_table_data(hash, &whdr->src, &whdr->dst, 0, 0, 1, pinfo->fd->pkt_len, &pinfo->rel_ts, &pinfo->abs_ts, &wlan_ct_dissector_info, PT_NONE);
5166
5167 return 1;
5168}
5169
5170static const char*
5171wlan_host_get_filter_type(hostlist_talker_t* host, conv_filter_type_e filter)
5172{
5173 if ((filter == CONV_FT_ANY_ADDRESS) && (host->myaddress.type == wlan_address_type))
5174 return "wlan.addr";
5175
5176 return CONV_FILTER_INVALID"INVALID";
5177}
5178
5179static hostlist_dissector_info_t wlan_host_dissector_info = {&wlan_host_get_filter_type};
5180
5181static int
5182wlan_hostlist_packet(void *pit, packet_info *pinfo, epan_dissect_t *edt _U___attribute__((unused)), const void *vip)
5183{
5184 conv_hash_t *hash = (conv_hash_t*) pit;
5185 const wlan_hdr_t *whdr=(const wlan_hdr_t *)vip;
5186
5187 /* Take two "add" passes per packet, adding for each direction, ensures that all
5188 packets are counted properly (even if address is sending to itself)
5189 XXX - this could probably be done more efficiently inside hostlist_table */
5190 add_hostlist_table_data(hash, &whdr->src, 0, TRUE(!(0)), 1, pinfo->fd->pkt_len, &wlan_host_dissector_info, PT_NONE);
5191 add_hostlist_table_data(hash, &whdr->dst, 0, FALSE(0), 1, pinfo->fd->pkt_len, &wlan_host_dissector_info, PT_NONE);
5192
5193 return 1;
5194}
5195
5196static const char*
5197wlan_col_filter_str(const address* addr _U___attribute__((unused)), gboolean is_src)
5198{
5199 if (is_src)
5200 return "wlan.sa";
5201
5202 return "wlan.da";
5203}
5204
5205static const char*
5206wlan_bssid_col_filter_str(const address* addr _U___attribute__((unused)), gboolean is_src _U___attribute__((unused)))
5207{
5208 return "wlan.bssid";
5209}
5210
5211
5212static void
5213beacon_interval_base_custom(gchar *result, guint32 beacon_interval)
5214{
5215 double temp_double;
5216
5217 temp_double = (double)beacon_interval;
5218 g_snprintf(result, ITEM_LABEL_LENGTH240, "%f [Seconds]", (temp_double * 1024 / 1000000));
5219}
5220
5221static void
5222allocation_duration_base_custom(gchar *result, guint32 allocation_duration)
5223{
5224 double temp_double;
5225
5226 temp_double = (double)allocation_duration;
5227 g_snprintf(result, ITEM_LABEL_LENGTH240, "%f [Seconds]", (temp_double / 1000000));
5228}
5229
5230static void
5231extra_one_base_custom(gchar *result, guint32 value)
5232{
5233 g_snprintf(result, ITEM_LABEL_LENGTH240, "%d", value+1);
5234}
5235
5236static void
5237extra_one_mul_two_base_custom(gchar *result, guint32 value)
5238{
5239 g_snprintf(result, ITEM_LABEL_LENGTH240, "%d", (value+1)*2);
5240}
5241
5242/* ************************************************************************* */
5243/* Mesh Control field helper functions
5244 *
5245 * Per IEEE 802.11s Draft 12.0 section 7.2.2.1:
5246 *
5247 * The frame body consists of either:
5248 * The MSDU (or a fragment thereof), the Mesh Control field (if and only if the
5249 * frame is transmitted by a mesh STA and the Mesh Control Present subfield of
5250 * the QoS Control field is 1)...
5251 *
5252 * 8.2.4.5.1 "QoS Control field structure", table 8-4, in 802.11-2012,
5253 * seems to indicate that the bit that means "Mesh Control Present" in
5254 * frames sent by mesh STAs in a mesh BSS is part of the TXOP Limit field,
5255 * the AP PS Buffer State field, the TXOP Duration Requested field, or the
5256 * Queue Size field in some data frames in non-mesh BSSes.
5257 *
5258 * We need a statefull sniffer for that. For now, use heuristics.
5259 *
5260 * Notably, only mesh data frames contain the Mesh Control field in the header.
5261 * Other frames that contain mesh control (i.e., multihop action frames) have
5262 * it deeper in the frame body where it can be definitively identified.
5263 * Further, mesh data frames always have to-ds and from-ds either 11 or 01. We
5264 * use these facts to make our heuristics more reliable.
5265 * ************************************************************************* */
5266static int
5267has_mesh_control(guint16 fcf, guint16 qos_ctl, guint8 mesh_flags)
5268{
5269 /* assume mesh control present if the QOS field's Mesh Control Present bit is
5270 * set, all reserved bits in the mesh_flags field are zero, and the address
5271 * extension mode is not a reserved value.
5272 */
5273 return (((FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8)) == DATA_ADDR_T4((0x01|0x02) << 8)) || (FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8)) == DATA_ADDR_T2(0x02 << 8))) &&
5274 (QOS_MESH_CONTROL_PRESENT(qos_ctl)(((qos_ctl) & 0x0100) >> 8)) &&
5275 ((mesh_flags & ~MESH_FLAGS_ADDRESS_EXTENSION0x3) == 0) &&
5276 ((mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION0x3) != MESH_FLAGS_ADDRESS_EXTENSION0x3));
5277}
5278
5279static int
5280find_mesh_control_length(guint8 mesh_flags)
5281{
5282 return 6 + 6*(mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION0x3);
5283}
5284
5285static mimo_control_t
5286get_mimo_control(tvbuff_t *tvb, int offset)
5287{
5288 guint16 mimo;
5289 mimo_control_t output;
5290
5291 mimo = tvb_get_letohs(tvb, offset);
5292
5293 output.nc = (mimo & 0x0003) + 1;
5294 output.nr = ((mimo & 0x000C) >> 2) + 1;
5295 output.chan_width = (mimo & 0x0010) >> 4;
5296 output.coefficient_size = 4; /* XXX - Is this a good default? */
5297
5298 switch ((mimo & 0x0060) >> 5)
5299 {
5300 case 0:
5301 output.grouping = 1;
5302 break;
5303
5304 case 1:
5305 output.grouping = 2;
5306 break;
5307
5308 case 2:
5309 output.grouping = 4;
5310 break;
5311
5312 default:
5313 output.grouping = 1;
5314 break;
5315 }
5316
5317 switch ((mimo & 0x0180) >> 7)
5318 {
5319 case 0:
5320 output.coefficient_size = 4;
5321 break;
5322
5323 case 1:
5324 output.coefficient_size = 5;
5325 break;
5326
5327 case 2:
5328 output.coefficient_size = 6;
5329 break;
5330
5331 case 3:
5332 output.coefficient_size = 8;
5333 break;
5334 }
5335
5336 output.codebook_info = (mimo & 0x0600) >> 9;
5337 output.remaining_matrix_segment = (mimo & 0x3800) >> 11;
5338
5339 return output;
5340}
5341
5342static int
5343get_mimo_na(guint8 nr, guint8 nc)
5344{
5345 if ((nr == 2) && (nc == 1)) {
5346 return 2;
5347 } else if ((nr == 2) && (nc == 2)) {
5348 return 2;
5349 } else if ((nr == 3) && (nc == 1)) {
5350 return 4;
5351 } else if ((nr == 3) && (nc == 2)) {
5352 return 6;
5353 } else if ((nr == 3) && (nc == 3)) {
5354 return 6;
5355 } else if ((nr == 4) && (nc == 1)) {
5356 return 6;
5357 } else if ((nr == 4) && (nc == 2)) {
5358 return 10;
5359 } else if ((nr == 4) && (nc == 3)) {
5360 return 12;
5361 } else if ((nr == 4) && (nc == 4)) {
5362 return 12;
5363 } else{
5364 return 0;
5365 }
5366}
5367
5368static int
5369get_mimo_ns(gboolean chan_width, guint8 output_grouping)
5370{
5371 int ns = 0;
5372
5373 if (chan_width)
5374 {
5375 switch (output_grouping)
5376 {
5377 case 1:
5378 ns = 114;
5379 break;
5380
5381 case 2:
5382 ns = 58;
5383 break;
5384
5385 case 4:
5386 ns = 30;
5387 break;
5388
5389 default:
5390 ns = 0;
5391 }
5392 } else {
5393 switch (output_grouping)
5394 {
5395 case 1:
5396 ns = 56;
5397 break;
5398
5399 case 2:
5400 ns = 30;
5401 break;
5402
5403 case 4:
5404 ns = 16;
5405 break;
5406
5407 default:
5408 ns = 0;
5409 }
5410 }
5411
5412 return ns;
5413}
5414
5415static int
5416add_mimo_csi_matrices_report(proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
5417{
5418 proto_tree *snr_tree;
5419 int csi_matrix_size, start_offset;
5420 int ns, i;
5421
5422 start_offset = offset;
5423 snr_tree = proto_tree_add_subtree(tree, tvb, offset, mimo_cntrl.nc,
5424 ett_mimo_report, NULL((void*)0), "Signal to Noise Ratio");
5425
5426 for (i = 1; i <= mimo_cntrl.nr; i++)
5427 {
5428 guint8 snr;
5429
5430 snr = tvb_get_guint8(tvb, offset);
5431 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
5432 snr, "Channel %d - Signal to Noise Ratio: 0x%02X", i, snr);
5433 offset += 1;
5434 }
5435
5436 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
5437 csi_matrix_size = ns*(3+(2*mimo_cntrl.nc*mimo_cntrl.nr*mimo_cntrl.coefficient_size));
5438 csi_matrix_size = roundup2(csi_matrix_size, 8)(((csi_matrix_size)+((8)-1))&(~((8)-1))) / 8;
5439 proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_matrices, tvb, offset, csi_matrix_size, ENC_NA0x00000000);
5440 offset += csi_matrix_size;
5441 return offset - start_offset;
5442}
5443
5444static int
5445add_mimo_beamforming_feedback_report(proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
5446{
5447 proto_tree *snr_tree;
5448 int csi_matrix_size, start_offset;
5449 int ns, i;
5450
5451 start_offset = offset;
5452 snr_tree = proto_tree_add_subtree(tree, tvb, offset, mimo_cntrl.nc, ett_mimo_report, NULL((void*)0), "Signal to Noise Ratio");
5453
5454 for (i = 1; i <= mimo_cntrl.nc; i++)
5455 {
5456 guint8 snr;
5457
5458 snr = tvb_get_guint8(tvb, offset);
5459 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
5460 snr, "Stream %d - Signal to Noise Ratio: 0x%02X", i, snr);
5461 offset += 1;
5462 }
5463
5464 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
5465 csi_matrix_size = ns*(2*mimo_cntrl.nc*mimo_cntrl.nr*mimo_cntrl.coefficient_size);
5466 csi_matrix_size = roundup2(csi_matrix_size, 8)(((csi_matrix_size)+((8)-1))&(~((8)-1))) / 8;
5467 proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_bf_matrices, tvb, offset, csi_matrix_size, ENC_NA0x00000000);
5468 offset += csi_matrix_size;
5469 return offset - start_offset;
5470}
5471
5472static int
5473add_mimo_compressed_beamforming_feedback_report(proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
5474{
5475 proto_tree *snr_tree;
5476 int csi_matrix_size, start_offset;
5477 int ns, na, i;
5478
5479 start_offset = offset;
5480 snr_tree = proto_tree_add_subtree(tree, tvb, offset, mimo_cntrl.nc,
5481 ett_mimo_report, NULL((void*)0), "Signal to Noise Ratio");
5482
5483 for (i = 1; i <= mimo_cntrl.nc; i++)
5484 {
5485 guint8 snr;
5486
5487 snr = tvb_get_guint8(tvb, offset);
5488 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
5489 snr, "Stream %d - Signal to Noise Ratio: 0x%02X", i, snr);
5490 offset += 1;
5491 }
5492
5493 na = get_mimo_na(mimo_cntrl.nr, mimo_cntrl.nc);
5494 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
5495 csi_matrix_size = ns*(na*((mimo_cntrl.codebook_info+1)*2 + 2)/2);
5496 csi_matrix_size = roundup2(csi_matrix_size, 8)(((csi_matrix_size)+((8)-1))&(~((8)-1))) / 8;
5497 proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_cbf_matrices, tvb, offset, csi_matrix_size, ENC_NA0x00000000);
5498 offset += csi_matrix_size;
5499 return offset - start_offset;
5500}
5501
5502/* ************************************************************************* */
5503/* This is the capture function used to update packet counts */
5504/* ************************************************************************* */
5505static gboolean
5506capture_ieee80211_common(const guchar * pd, int offset, int len,
5507 capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header _U___attribute__((unused)), gboolean datapad)
5508{
5509 guint16 fcf, hdr_length;
5510
5511 if (!BYTES_ARE_IN_FRAME(offset, len, 2)((guint)(offset) + (guint)(2) > (guint)(offset) &&
(guint)(offset) + (guint)(2) <= (guint)(len))
)
5512 return FALSE(0);
5513
5514 fcf = pletoh16(&pd[offset])((guint16) ((guint16)*((const guint8 *)(&pd[offset])+1)<<
8| (guint16)*((const guint8 *)(&pd[offset])+0)<<0))
;
5515
5516 if (IS_PROTECTED(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x40)
&& (wlan_ignore_prot == WLAN_IGNORE_PROT_NO0))
5517 return FALSE(0);
5518
5519 switch (COMPOSE_FRAME_TYPE (fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf & 0x0C)<< 6) + (
(fcf) & 0xF0) + (((fcf) & 0xF00) >> 8)) : (((fcf
& 0x0C)<< 2)+(((fcf) & 0xF0) >> 4)))
) {
5520
5521 case DATA0x20:
5522 case DATA_CF_ACK0x21:
5523 case DATA_CF_POLL0x22:
5524 case DATA_CF_ACK_POLL0x23:
5525 case DATA_QOS_DATA0x28:
5526 case DATA_QOS_DATA_CF_ACK0x29:
5527 case DATA_QOS_DATA_CF_POLL0x2A:
5528 case DATA_QOS_DATA_CF_ACK_POLL0x2B:
5529 {
5530 /* These are data frames that actually contain *data*. */
5531 hdr_length = (FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8)) == DATA_ADDR_T4((0x01|0x02) << 8)) ? DATA_LONG_HDR_LEN30 : DATA_SHORT_HDR_LEN24;
5532
5533 if (DATA_FRAME_IS_QOS(COMPOSE_FRAME_TYPE(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf & 0x0C)<< 6) + (
(fcf) & 0xF0) + (((fcf) & 0xF00) >> 8)) : (((fcf
& 0x0C)<< 2)+(((fcf) & 0xF0) >> 4)))) &
0x08)
) {
5534 /* QoS frame, so the header includes a QoS field */
5535 guint16 qosoff; /* Offset of the 2-byte QoS field */
5536 guint8 mesh_flags;
5537
5538 qosoff = hdr_length;
5539 hdr_length += 2; /* Include the QoS field in the header length */
5540
5541 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x80)
) {
5542 /* Frame has a 4-byte HT Control field */
5543 hdr_length += 4;
5544 }
5545
5546 /*
5547 * Does it look as if we have a mesh header?
5548 * Look at the Mesh Control subfield of the QoS field and at the
5549 * purported mesh flag fields.
5550 */
5551 if (!BYTES_ARE_IN_FRAME(offset, hdr_length, 1)((guint)(offset) + (guint)(1) > (guint)(offset) &&
(guint)(offset) + (guint)(1) <= (guint)(hdr_length))
)
5552 return FALSE(0);
5553
5554 mesh_flags = pd[hdr_length];
5555 if (has_mesh_control(fcf, pletoh16(&pd[qosoff])((guint16) ((guint16)*((const guint8 *)(&pd[qosoff])+1)<<
8| (guint16)*((const guint8 *)(&pd[qosoff])+0)<<0))
, mesh_flags)) {
5556 /* Yes, add the length of that in as well. */
5557 hdr_length += find_mesh_control_length(mesh_flags);
5558 }
5559
5560 if (datapad) {
5561 /*
5562 * Include the padding between the 802.11 header and the body,
5563 * as "helpfully" provided by some Atheros adapters.
5564 *
5565 * XXX - would the mesh header be part of the header or the body
5566 * from the point of view of the Atheros adapters that insert
5567 * the padding, assuming they even recognize a mesh header?
5568 */
5569 hdr_length = roundup2(hdr_length, 4)(((hdr_length)+((4)-1))&(~((4)-1)));
5570 }
5571 }
5572 /* I guess some bridges take Netware Ethernet_802_3 frames,
5573 which are 802.3 frames (with a length field rather than
5574 a type field, but with no 802.2 header in the payload),
5575 and just stick the payload into an 802.11 frame. I've seen
5576 captures that show frames of that sort.
5577
5578 We also handle some odd form of encapsulation in which a
5579 complete Ethernet frame is encapsulated within an 802.11
5580 data frame, with no 802.2 header. This has been seen
5581 from some hardware.
5582
5583 On top of that, at least at some point it appeared that
5584 the OLPC XO sent out frames with two bytes of 0 between
5585 the "end" of the 802.11 header and the beginning of
5586 the payload.
5587
5588 So, if the packet doesn't start with 0xaa 0xaa:
5589
5590 we first use the same scheme that linux-wlan-ng does to detect
5591 those encapsulated Ethernet frames, namely looking to see whether
5592 the frame either starts with 6 octets that match the destination
5593 address from the 802.11 header or has 6 octets that match the
5594 source address from the 802.11 header following the first 6 octets,
5595 and, if so, treat it as an encapsulated Ethernet frame;
5596
5597 otherwise, we use the same scheme that we use in the Ethernet
5598 dissector to recognize Netware 802.3 frames, namely checking
5599 whether the packet starts with 0xff 0xff and, if so, treat it
5600 as an encapsulated IPX frame, and then check whether the
5601 packet starts with 0x00 0x00 and, if so, treat it as an OLPC
5602 frame. */
5603 if (!BYTES_ARE_IN_FRAME(offset+hdr_length, len, 2)((guint)(offset+hdr_length) + (guint)(2) > (guint)(offset+
hdr_length) && (guint)(offset+hdr_length) + (guint)(2
) <= (guint)(len))
)
5604 return FALSE(0);
5605
5606 if ((pd[offset+hdr_length] != 0xaa) && (pd[offset+hdr_length+1] != 0xaa)) {
5607#if 0
5608 /* XXX - this requires us to parse the header to find the source
5609 and destination addresses. */
5610 if (BYTES_ARE_IN_FRAME(offset+hdr_length, len, 12)((guint)(offset+hdr_length) + (guint)(12) > (guint)(offset
+hdr_length) && (guint)(offset+hdr_length) + (guint)(
12) <= (guint)(len))
) {
5611 /* We have two MAC addresses after the header. */
5612 if ((memcmp(&pd[offset+hdr_length+6], pinfo->dl_src.data, 6) == 0) ||
5613 (memcmp(&pd[offset+hdr_length+6], pinfo->dl_dst.data, 6) == 0)) {
5614 return capture_eth (pd, offset + hdr_length, len, cpinfo, pseudo_header);
5615 }
5616 }
5617#endif
5618 if ((pd[offset+hdr_length] == 0xff) && (pd[offset+hdr_length+1] == 0xff))
5619 return capture_ipx (pd, offset+hdr_length, len, cpinfo, pseudo_header);
5620 else if ((pd[offset+hdr_length] == 0x00) && (pd[offset+hdr_length+1] == 0x00))
5621 return capture_llc (pd, offset + hdr_length + 2, len, cpinfo, pseudo_header);
5622 }
5623 else {
5624 return capture_llc (pd, offset + hdr_length, len, cpinfo, pseudo_header);
5625 }
5626 break;
5627 }
5628 }
5629
5630 return FALSE(0);
5631}
5632
5633/*
5634 * Handle 802.11 with a variable-length link-layer header.
5635 */
5636gboolean
5637capture_ieee80211(const guchar * pd, int offset, int len, capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header _U___attribute__((unused)))
5638{
5639 return capture_ieee80211_common (pd, offset, len, cpinfo, pseudo_header, FALSE(0));
5640}
5641
5642/*
5643 * Handle 802.11 with a variable-length link-layer header and data padding.
5644 */
5645gboolean
5646capture_ieee80211_datapad(const guchar * pd, int offset, int len,
5647 capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header _U___attribute__((unused)))
5648{
5649 return capture_ieee80211_common (pd, offset, len, cpinfo, pseudo_header, TRUE(!(0)));
5650}
5651
5652
5653/* ************************************************************************* */
5654/* Add the subtree used to store the fixed parameters */
5655/* ************************************************************************* */
5656static proto_tree *
5657get_fixed_parameter_tree(proto_tree * tree, tvbuff_t *tvb, int start, int size)
5658{
5659 proto_item *fixed_fields;
5660
5661 fixed_fields = proto_tree_add_item(tree, hf_ieee80211_fixed_parameters, tvb, start, size, ENC_NA0x00000000);
5662 proto_item_append_text(fixed_fields, " (%d bytes)", size);
5663
5664 return proto_item_add_subtree(fixed_fields, ett_fixed_parameters);
5665}
5666
5667
5668/* ************************************************************************* */
5669/* Add the subtree used to store tagged parameters */
5670/* ************************************************************************* */
5671static proto_tree *
5672get_tagged_parameter_tree(proto_tree * tree, tvbuff_t *tvb, int start, int size)
5673{
5674 proto_item *tagged_fields;
5675
5676 tagged_fields = proto_tree_add_item(tree, hf_ieee80211_tagged_parameters, tvb, start, -1, ENC_NA0x00000000);
5677 proto_item_append_text(tagged_fields, " (%d bytes)", size);
5678
5679 return proto_item_add_subtree(tagged_fields, ett_tagged_parameters);
5680}
5681
5682
5683static int
5684dissect_vendor_action_marvell(proto_tree *tree, tvbuff_t *tvb, int offset)
5685{
5686 guint8 octet;
5687
5688 octet = tvb_get_guint8(tvb, offset);
5689 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_action_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
5690 offset += 1;
5691 switch (octet)
5692 {
5693 case MRVL_ACTION_MESH_MANAGEMENT1:
5694 octet = tvb_get_guint8(tvb, offset);
5695 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
5696 offset += 1;
5697 switch (octet)
5698 {
5699 case MRVL_MESH_MGMT_ACTION_RREQ0:
5700 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
5701 offset += 1;
5702 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
5703 offset += 1;
5704 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
5705 offset += 1;
5706 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
5707 offset += 1;
5708 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_rreqid, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
5709 offset += 4;
5710 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_sa, tvb, offset, 6, ENC_NA0x00000000);
5711 offset += 6;
5712 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ssn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
5713 offset += 4;
5714 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
5715 offset += 4;
5716 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
5717 offset += 4;
5718 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dstcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
5719 offset += 1;
5720 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
5721 offset += 1;
5722 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA0x00000000);
5723 offset += 6;
5724 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
5725 offset += 4;
5726 break;
5727 case MRVL_MESH_MGMT_ACTION_RREP1:
5728 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
5729 offset += 1;
5730 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
5731 offset += 1;
5732 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
5733 offset += 1;
5734 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
5735 offset += 1;
5736 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA0x00000000);
5737 offset += 6;
5738 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
5739 offset += 4;
5740 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
5741 offset += 4;
5742 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
5743 offset += 4;
5744 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_sa, tvb, offset, 6, ENC_NA0x00000000);
5745 offset += 6;
5746 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ssn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
5747 offset += 4;
5748 break;
5749 case MRVL_MESH_MGMT_ACTION_RERR2:
5750 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
5751 offset += 1;
5752 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
5753 offset += 1;
5754 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dstcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
5755 offset += 1;
5756 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA0x00000000);
5757 offset += 6;
5758 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
5759 offset += 4;
5760 break;
5761 default:
5762 break;
5763 }
5764 break;
5765 default:
5766 break;
5767 }
5768
5769 return offset;
5770}
5771
5772static guint
5773dissect_advertisement_protocol(packet_info *pinfo, proto_tree *tree,
5774 tvbuff_t *tvb, int offset, gboolean *anqp)
5775{
5776 guint8 tag_no, tag_len, left;
5777 proto_item *item = NULL((void*)0), *adv_item;
5778 proto_tree *adv_tree, *adv_tuple_tree;
5779
5780 if (anqp)
5781 *anqp = FALSE(0);
5782 tag_no = tvb_get_guint8(tvb, offset);
5783 if (anqp)
5784 item = proto_tree_add_item(tree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
5785
5786 tag_len = tvb_get_guint8(tvb, offset + 1);
5787 if (tag_no != TAG_ADVERTISEMENT_PROTOCOL108) {
5788 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_number,
5789 "Unexpected IE %d (expected Advertisement "
5790 "Protocol)", tag_no);
5791 return 2 + tag_len;
5792 }
5793 if (anqp)
5794 item = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
5795 if (tag_len < 2) {
5796 if (!anqp)
5797 item = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
5798 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
5799 "Advertisement Protocol: IE must be at least 2 "
5800 "octets long");
5801 return 2 + tag_len;
5802 }
5803
5804 left = tag_len;
5805 offset += 2;
5806 adv_tree = proto_tree_add_subtree(tree, tvb, offset, left,
5807 ett_adv_proto, &adv_item, "Advertisement Protocol element");
5808
5809 while (left >= 2) {
5810 guint8 id;
5811
5812 id = tvb_get_guint8(tvb, offset + 1);
5813 if (id == 0)
5814 proto_item_append_text(adv_item, ": ANQP");
5815 adv_tuple_tree = proto_tree_add_subtree_format(adv_tree, tvb, offset, 2, ett_adv_proto_tuple, &item,
5816 "Advertisement Protocol Tuple: %s",
5817 val_to_str(id, adv_proto_id_vals,
5818 "Unknown (%d)"));
5819
5820 proto_tree_add_item(adv_tuple_tree,
5821 hf_ieee80211_tag_adv_proto_resp_len_limit, tvb,
5822 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
5823 proto_tree_add_item(adv_tuple_tree,
5824 hf_ieee80211_tag_adv_proto_pame_bi, tvb,
5825 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
5826 offset += 1;
5827 left--;
5828 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_tag_adv_proto_id, tvb,
5829 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
5830 offset += 1;
5831 left--;
5832
5833 if ((id == 0) && anqp)
5834 *anqp = TRUE(!(0));
5835
5836 if (id == 221) {
5837 /* Vendor specific */
5838 guint8 len = tvb_get_guint8(tvb, offset);
5839 offset += 1;
5840 left -= 1;
5841 if (len > left) {
5842 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
5843 "Vendor specific info length error");
5844 return 2 + tag_len;
5845 }
5846 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_tag_adv_proto_vs_info, tvb,
5847 offset, len, ENC_NA0x00000000);
5848 offset += len;
5849 left -= len;
5850 }
5851 }
5852
5853 if (left) {
5854 expert_add_info_format(pinfo, item, &ei_ieee80211_extra_data,
5855 "Unexpected extra data in the end");
5856 }
5857
5858 return 2 + tag_len;
5859}
5860
5861static void
5862dissect_anqp_query_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
5863{
5864 while (offset + 2 <= end) {
5865 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_query_id,
5866 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
5867 offset += 2;
5868 }
5869 if (offset != end) {
5870 expert_add_info_format(pinfo, tree, &ei_ieee80211_ff_anqp_info_length,
5871 "Unexpected ANQP Query list format");
5872 }
5873}
5874
5875static void
5876dissect_hs20_anqp_hs_capability_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
5877{
5878 while (offset < end) {
5879 proto_tree_add_item(tree, hf_hs20_anqp_hs_capability_list,
5880 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
5881 offset++;
5882 }
5883}
5884
5885static void
5886dissect_anqp_capab_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
5887{
5888 guint16 id, len;
5889 proto_item *item;
5890 proto_tree *vtree;
5891 guint32 oui;
5892 guint8 subtype;
5893
5894 while (offset + 2 <= end) {
5895 id = tvb_get_letohs(tvb, offset);
5896 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_capability,
5897 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
5898 offset += 2;
5899 if (id == ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797) {
5900 vtree = proto_item_add_subtree(item, ett_anqp_vendor_capab);
5901 len = tvb_get_letohs(tvb, offset);
5902 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vlen,
5903 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
5904 offset += 2;
5905 if ((len < 3) || ((offset + len) > end)) {
5906 expert_add_info(pinfo, tree, &ei_ieee80211_ff_anqp_capability);
5907 return;
5908 }
5909 oui = tvb_get_ntoh24(tvb, offset);
5910 proto_tree_add_item(vtree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA0x00000000);
5911 offset += 3;
5912 len -= 3;
5913
5914 switch (oui) {
5915 case OUI_WFA0x506F9A:
5916 if (len == 0)
5917 break;
5918 subtype = tvb_get_guint8(tvb, offset);
5919 proto_item_append_text(vtree, " - WFA - %s",
5920 val_to_str(subtype, wfa_subtype_vals,
5921 "Unknown (%u)"));
5922 proto_tree_add_item(vtree, hf_ieee80211_anqp_wfa_subtype,
5923 tvb, offset, 1, ENC_NA0x00000000);
5924 offset++;
5925 len--;
5926 switch (subtype) {
5927 case WFA_SUBTYPE_HS20_ANQP17:
5928 dissect_hs20_anqp_hs_capability_list(vtree, tvb, offset, end);
5929 break;
5930 default:
5931 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vendor,
5932 tvb, offset, len, ENC_NA0x00000000);
5933 break;
5934 }
5935 break;
5936 default:
5937 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vendor,
5938 tvb, offset, len, ENC_NA0x00000000);
5939 break;
5940 }
5941
5942 offset += len;
5943 }
5944 }
5945 if (offset != end) {
5946 expert_add_info_format(pinfo, tree, &ei_ieee80211_ff_anqp_info_length,
5947 "Unexpected ANQP Capability list format");
5948 }
5949}
5950
5951static const value_string venue_group_vals[] = {
5952 { 0, "Unspecified" },
5953 { 1, "Assembly" },
5954 { 2, "Business" },
5955 { 3, "Educational" },
5956 { 4, "Factory and Industrial" },
5957 { 5, "Institutional" },
5958 { 6, "Mercantile" },
5959 { 7, "Residential" },
5960 { 8, "Storage" },
5961 { 9, "Utility and Miscellaneous" },
5962 { 10, "Vehicular" },
5963 { 11, "Outdoor" },
5964 { 0, NULL((void*)0) }
5965};
5966static value_string_ext venue_group_vals_ext = VALUE_STRING_EXT_INIT(venue_group_vals){ _try_val_to_str_ext_init, 0, (sizeof (venue_group_vals) / sizeof
((venue_group_vals)[0]))-1, venue_group_vals, "venue_group_vals"
}
;
5967
5968static void
5969dissect_venue_info(proto_tree *tree, tvbuff_t *tvb, int offset)
5970{
5971 proto_tree_add_item(tree, hf_ieee80211_ff_venue_info_group,
5972 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
5973 proto_tree_add_item(tree, hf_ieee80211_ff_venue_info_type,
5974 tvb, offset + 1, 1, ENC_LITTLE_ENDIAN0x80000000);
5975}
5976
5977static void
5978dissect_venue_name_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
5979{
5980 proto_item *item;
5981
5982 dissect_venue_info(tree, tvb, offset);
5983 offset += 2;
5984 while (offset + 4 <= end) {
5985 guint8 vlen = tvb_get_guint8(tvb, offset);
5986 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_length,
5987 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
5988 offset += 1;
5989 if ((vlen > (end - offset)) || (vlen < 3)) {
5990 expert_add_info(pinfo, item, &ei_ieee80211_ff_anqp_venue_length);
5991 break;
5992 }
5993 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_language,
5994 tvb, offset, 3, ENC_ASCII0x00000000|ENC_NA0x00000000);
5995 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_name,
5996 tvb, offset + 3, vlen - 3, ENC_UTF_80x00000002|ENC_NA0x00000000);
5997 offset += vlen;
5998 }
5999}
6000
6001static const value_string nw_auth_type_vals[] = {
6002 { 0, "Acceptance of terms and conditions" },
6003 { 1, "On-line enrollment supported" },
6004 { 2, "http/https redirection" },
6005 { 3, "DNS redirection" },
6006 { 0, NULL((void*)0) }
6007};
6008
6009static void
6010dissect_network_auth_type(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
6011{
6012 while (offset + 3 <= end) {
6013 guint16 len;
6014 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_indicator,
6015 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6016 offset += 1;
6017 len = tvb_get_letohs(tvb, offset);
6018 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_url_len,
6019 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
6020 offset += 2;
6021 if (len)
6022 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_url,
6023 tvb, offset, len, ENC_ASCII0x00000000|ENC_NA0x00000000);
6024 offset += len;
6025 }
6026}
6027
6028static void
6029add_manuf(proto_item *item, tvbuff_t *tvb, int offset)
6030{
6031 const gchar *manuf_name;
6032
6033 manuf_name = tvb_get_manuf_name_if_known(tvb, offset);
6034 if (manuf_name == NULL((void*)0))
6035 return;
6036 proto_item_append_text(item, " - %s", manuf_name);
6037}
6038
6039static void
6040dissect_roaming_consortium_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
6041 int end)
6042{
6043 proto_item *item;
6044 guint8 len;
6045
6046 while (offset < end) {
6047 len = tvb_get_guint8(tvb, offset);
6048 item = proto_tree_add_item(tree,
6049 hf_ieee80211_ff_anqp_roaming_consortium_oi_len,
6050 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6051 offset += 1;
6052 if ((len > (end - offset)) || (len < 3)) {
6053 expert_add_info(pinfo, item, &ei_ieee80211_ff_anqp_roaming_consortium_oi_len);
6054 break;
6055 }
6056 item = proto_tree_add_item(tree,
6057 hf_ieee80211_ff_anqp_roaming_consortium_oi,
6058 tvb, offset, len, ENC_NA0x00000000);
6059 add_manuf(item, tvb, offset);
6060 offset += len;
6061 }
6062}
6063
6064static const value_string ip_addr_avail_ipv6_vals[] = {
6065 { 0, "Address type not available" },
6066 { 1, "Address type available" },
6067 { 2, "Availability of the address type not known" },
6068 { 0, NULL((void*)0) }
6069};
6070
6071static const value_string ip_addr_avail_ipv4_vals[] = {
6072 { 0, "Address type not available" },
6073 { 1, "Public IPv4 address available" },
6074 { 2, "Port-restricted IPv4 address available" },
6075 { 3, "Single NATed private IPv4 address available" },
6076 { 4, "Double NATed private IPv4 address available" },
6077 { 5, "Port-restricted IPv4 address and single NATed IPv4 address available" },
6078 { 6, "Port-restricted IPv4 address and double NATed IPv4 address available" },
6079 { 7, "Availability of the address type is not known" },
6080 { 0, NULL((void*)0) }
6081};
6082
6083static void
6084dissect_ip_addr_type_availability_info(proto_tree *tree, tvbuff_t *tvb,
6085 int offset)
6086{
6087 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_ip_addr_avail_ipv6,
6088 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6089 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_ip_addr_avail_ipv4,
6090 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6091}
6092
6093static const value_string nai_realm_encoding_vals[] = {
6094 { 0, "Formatted in accordance with RFC 4282" },
6095 { 1, "UTF-8 formatted that is not formatted in accordance with RFC 4282" },
6096 { 0, NULL((void*)0) }
6097};
6098
6099static const value_string nai_realm_auth_param_id_vals[] = {
6100 { 1, "Expanded EAP Method" },
6101 { 2, "Non-EAP Inner Authentication Type" },
6102 { 3, "Inner Authentication EAP Method Type" },
6103 { 4, "Expanded Inner EAP Method" },
6104 { 5, "Credential Type" },
6105 { 6, "Tunneled EAP Method Credential Type" },
6106 { 221, "Vendor Specific" },
6107 { 0, NULL((void*)0) }
6108};
6109
6110static void
6111dissect_nai_realm_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
6112{
6113 guint16 count, len;
6114 proto_item *item, *r_item;
6115 int f_end, eap_end;
6116 guint8 nai_len, eap_count, eap_len, auth_param_count, auth_param_len;
6117 guint8 auth_param_id;
6118 proto_tree *realm_tree, *eap_tree;
6119 const guint8 *realm;
6120
6121 count = tvb_get_letohs(tvb, offset);
6122 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nai_realm_count,
6123 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
6124 offset += 2;
6125 while (count > 0) {
6126 len = tvb_get_letohs(tvb, offset);
6127 realm_tree = proto_tree_add_subtree(tree, tvb, offset, 2 + len, ett_nai_realm, &r_item, "NAI Realm Data");
6128
6129 item = proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_field_len,
6130 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
6131 offset += 2;
6132 if (offset + len > end) {
6133 expert_add_info_format(pinfo, item, &ei_ieee80211_ff_anqp_nai_field_len,
6134 "Invalid NAI Realm List");
6135 break;
6136 }
6137 f_end = offset + len;
6138 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_encoding,
6139 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6140 offset += 1;
6141 nai_len = tvb_get_guint8(tvb, offset);
6142 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_length,
6143 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6144 offset += 1;
6145 if (offset + nai_len > f_end) {
6146 expert_add_info_format(pinfo, r_item, &ei_ieee80211_ff_anqp_nai_field_len,
6147 "Invalid NAI Realm Data");
6148 break;
6149 }
6150 proto_tree_add_item_ret_string(realm_tree, hf_ieee80211_ff_anqp_nai_realm,
6151 tvb, offset, nai_len, ENC_ASCII0x00000000|ENC_NA0x00000000, wmem_packet_scope(), &realm);
6152 if (realm) {
6153 proto_item_append_text(r_item, " (%s)", realm);
6154 }
6155 offset += nai_len;
6156 eap_count = tvb_get_guint8(tvb, offset);
6157 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_eap_count,
6158 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6159 offset += 1;
6160
6161 while (eap_count > 0) {
6162 eap_len = tvb_get_guint8(tvb, offset);
6163 eap_end = offset + 1 + eap_len;
6164 eap_tree = proto_tree_add_subtree(realm_tree, tvb, offset, 1 + eap_len,
6165 ett_nai_realm_eap, NULL((void*)0), "EAP Method");
6166
6167 item = proto_tree_add_item(eap_tree,
6168 hf_ieee80211_ff_anqp_nai_realm_eap_len,
6169 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6170 offset += 1;
6171 if (offset + eap_len > f_end) {
6172 expert_add_info(pinfo, item, &ei_ieee80211_ff_anqp_nai_realm_eap_len);
6173 break;
6174 }
6175
6176 proto_item_append_text(eap_tree, ": %s",
6177 val_to_str_ext(tvb_get_guint8(tvb, offset),
6178 &eap_type_vals_ext, "Unknown (%d)"));
6179 proto_tree_add_item(eap_tree, hf_ieee80211_ff_anqp_nai_realm_eap_method,
6180 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6181 offset += 1;
6182 auth_param_count = tvb_get_guint8(tvb, offset);
6183 proto_tree_add_item(eap_tree,
6184 hf_ieee80211_ff_anqp_nai_realm_auth_param_count,
6185 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6186 offset += 1;
6187
6188 while (auth_param_count > 0) {
6189 auth_param_id = tvb_get_guint8(tvb, offset);
6190 proto_tree_add_item(eap_tree,
6191 hf_ieee80211_ff_anqp_nai_realm_auth_param_id,
6192 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6193 offset += 1;
6194 auth_param_len = tvb_get_guint8(tvb, offset);
6195 proto_tree_add_item(eap_tree,
6196 hf_ieee80211_ff_anqp_nai_realm_auth_param_len,
6197 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6198 offset += 1;
6199 item = proto_tree_add_item(
6200 eap_tree, hf_ieee80211_ff_anqp_nai_realm_auth_param_value,
6201 tvb, offset, auth_param_len, ENC_NA0x00000000);
6202 if ((auth_param_id == 3) && (auth_param_len == 1)) {
6203 guint8 inner_method = tvb_get_guint8(tvb, offset);
6204 const char *str;
6205 str = val_to_str_ext(inner_method, &eap_type_vals_ext, "Unknown (%d)");
6206
6207 proto_item_append_text(eap_tree, " / %s", str);
6208 proto_item_append_text(item, " - %s", str);
6209 }
6210 offset += auth_param_len;
6211
6212 auth_param_count--;
6213 }
6214
6215 offset = eap_end;
6216 eap_count--;
6217 }
6218
6219 offset = f_end;
6220 count--;
6221 }
6222}
6223
6224static void
6225dissect_3gpp_cellular_network_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
6226{
6227 guint8 iei, num;
6228 proto_item *item;
6229
6230 /* See Annex A of 3GPP TS 24.234 v8.1.0 for description */
6231 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_gud, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6232 offset += 1;
6233 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_udhl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6234 offset += 1;
6235 iei = tvb_get_guint8(tvb, offset);
6236 item = proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_iei, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6237 if (iei == 0)
6238 proto_item_append_text(item, " (PLMN List)");
6239 else
6240 return;
6241 offset += 1;
6242 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_plmn_len, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6243 offset += 1;
6244 num = tvb_get_guint8(tvb, offset);
6245 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_num_plmns, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6246 offset += 1;
6247 while (num > 0) {
6248 if (tvb_reported_length_remaining(tvb, offset) < 3)
6249 break;
6250 dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, offset, E212_NONE, TRUE(!(0)));
6251 num--;
6252 offset += 3;
6253 }
6254}
6255
6256static void
6257dissect_domain_name_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
6258{
6259 guint8 len;
6260
6261 while (offset < end) {
6262 len = tvb_get_guint8(tvb, offset);
6263 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_domain_name_len,
6264 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6265 offset += 1;
6266 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_domain_name,
6267 tvb, offset, len, ENC_ASCII0x00000000|ENC_NA0x00000000);
6268 offset += len;
6269 }
6270}
6271
6272#define HS20_ANQP_HS_QUERY_LIST1 1
6273#define HS20_ANQP_HS_CAPABILITY_LIST2 2
6274#define HS20_ANQP_OPERATOR_FRIENDLY_NAME3 3
6275#define HS20_ANQP_WAN_METRICS4 4
6276#define HS20_ANQP_CONNECTION_CAPABILITY5 5
6277#define HS20_ANQP_NAI_HOME_REALM_QUERY6 6
6278#define HS20_ANQP_OPERATING_CLASS_INDICATION7 7
6279
6280static const value_string hs20_anqp_subtype_vals[] = {
6281 { HS20_ANQP_HS_QUERY_LIST1, "HS Query list" },
6282 { HS20_ANQP_HS_CAPABILITY_LIST2, "HS Capability List" },
6283 { HS20_ANQP_OPERATOR_FRIENDLY_NAME3, "Operator Friendly Name" },
6284 { HS20_ANQP_WAN_METRICS4, "WAN Metrics" },
6285 { HS20_ANQP_CONNECTION_CAPABILITY5, "Connection Capability" },
6286 { HS20_ANQP_NAI_HOME_REALM_QUERY6, "NAI Home Realm Query" },
6287 { HS20_ANQP_OPERATING_CLASS_INDICATION7, "Operating Class Indication" },
6288 { 0, NULL((void*)0) }
6289};
6290
6291static void
6292dissect_hs20_anqp_hs_query_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
6293{
6294 while (offset < end) {
6295 proto_tree_add_item(tree, hf_hs20_anqp_hs_query_list,
6296 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6297 offset++;
6298 }
6299}
6300
6301static void
6302dissect_hs20_anqp_operator_friendly_name(proto_tree *tree, tvbuff_t *tvb,
6303 packet_info *pinfo, int offset, int end)
6304{
6305 while (offset + 4 <= end) {
6306 guint8 vlen = tvb_get_guint8(tvb, offset);
6307 proto_item *item = proto_tree_add_item(tree, hf_hs20_anqp_ofn_length,
6308 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6309 offset++;
6310 if (vlen > end - offset || vlen < 3) {
6311 expert_add_info(pinfo, item, &ei_hs20_anqp_ofn_length);
6312 break;
6313 }
6314 proto_tree_add_item(tree, hf_hs20_anqp_ofn_language,
6315 tvb, offset, 3, ENC_ASCII0x00000000|ENC_NA0x00000000);
6316 proto_tree_add_item(tree, hf_hs20_anqp_ofn_name,
6317 tvb, offset + 3, vlen - 3, ENC_UTF_80x00000002|ENC_NA0x00000000);
6318 offset += vlen;
6319 }
6320}
6321
6322static const value_string hs20_wm_link_status_vals[] = {
6323 { 0, "Reserved" },
6324 { 1, "Link up" },
6325 { 2, "Link down" },
6326 { 3, "Link in test state" },
6327 { 0, NULL((void*)0) }
6328};
6329
6330static void
6331dissect_hs20_anqp_wan_metrics(proto_tree *tree, tvbuff_t *tvb, int offset, gboolean request)
6332{
6333 if (request)
6334 return;
6335
6336 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_link_status,
6337 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6338 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_symmetric_link,
6339 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6340 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_at_capacity,
6341 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6342 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_reserved,
6343 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6344 offset++;
6345
6346 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_downlink_speed,
6347 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
6348 offset += 4;
6349
6350 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_uplink_speed,
6351 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
6352 offset += 4;
6353
6354 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_downlink_load,
6355 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6356 offset++;
6357
6358 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_uplink_load,
6359 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6360 offset++;
6361
6362 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_lmd,
6363 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
6364}
6365
6366static const value_string hs20_cc_status_vals[] = {
6367 { 0, "Closed" },
6368 { 1, "Open" },
6369 { 2, "Unknown" },
6370 { 0, NULL((void*)0) }
6371};
6372
6373static void
6374dissect_hs20_anqp_connection_capability(proto_tree *tree, tvbuff_t *tvb,
6375 int offset, int end)
6376{
6377 proto_tree *tuple;
6378 while (offset + 4 <= end) {
6379 guint8 ip_proto, status;
6380 guint16 port_num;
6381
6382 ip_proto = tvb_get_guint8(tvb, offset);
6383 port_num = tvb_get_letohs(tvb, offset + 1);
6384 status = tvb_get_guint8(tvb, offset + 3);
6385
6386 tuple = proto_tree_add_subtree_format(tree, tvb, offset, 4, ett_hs20_cc_proto_port_tuple, NULL((void*)0),
6387 "ProtoPort Tuple - ip_proto=%u port_num=%u status=%s",
6388 ip_proto, port_num,
6389 val_to_str(status, hs20_cc_status_vals,
6390 "Unknown (%u)"));
6391 proto_tree_add_item(tuple, hf_hs20_anqp_cc_proto_ip_proto,
6392 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6393 offset++;
6394 proto_tree_add_item(tuple, hf_hs20_anqp_cc_proto_port_num,
6395 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
6396 offset += 2;
6397 proto_tree_add_item(tuple, hf_hs20_anqp_cc_proto_status,
6398 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6399 offset++;
6400 }
6401}
6402
6403static void
6404dissect_hs20_anqp_nai_home_realm_query(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
6405 int offset, int end)
6406{
6407 guint8 len;
6408 proto_item *item;
6409
6410 proto_tree_add_item(tree, hf_hs20_anqp_nai_hrq_count,
6411 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6412 offset++;
6413
6414 while (offset + 2 <= end) {
6415 proto_tree_add_item(tree, hf_hs20_anqp_nai_hrq_encoding_type,
6416 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6417 offset++;
6418 len = tvb_get_guint8(tvb, offset);
6419 item = proto_tree_add_item(tree, hf_hs20_anqp_nai_hrq_length,
6420 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6421 offset++;
6422 if (offset + len > end) {
6423 expert_add_info(pinfo, item, &ei_hs20_anqp_nai_hrq_length);
6424 break;
6425 }
6426 proto_tree_add_item(tree, hf_hs20_anqp_nai_hrq_realm_name,
6427 tvb, offset, len, ENC_ASCII0x00000000|ENC_NA0x00000000);
6428 offset += len;
6429 }
6430}
6431
6432static void
6433dissect_hs20_anqp_oper_class_indic(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
6434{
6435 while (offset < end) {
6436 proto_tree_add_item(tree, hf_hs20_anqp_oper_class_indic,
6437 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
6438 offset++;
6439 }
6440}
6441
6442static void
6443dissect_hs20_anqp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
6444 int end, gboolean request, int idx)
6445{
6446 guint8 subtype;
6447
6448 subtype = tvb_get_guint8(tvb, offset);
6449 proto_item_append_text(tree, " - HS 2.0 %s",
6450 val_to_str(subtype, hs20_anqp_subtype_vals,
6451 "Unknown (%u)"));
6452 if (idx == 0) {
6453 col_append_fstr(pinfo->cinfo, COL_INFO, " HS 2.0 %s",
6454 val_to_str(subtype, hs20_anqp_subtype_vals,
6455 "Unknown (%u)"));
6456 } else if (idx == 1) {
6457 col_append_str(pinfo->cinfo, COL_INFO, ", ..");
6458 }
6459 proto_tree_add_item(tree, hf_hs20_anqp_subtype, tvb, offset, 1,
6460 ENC_LITTLE_ENDIAN0x80000000);
6461 offset++;
6462
6463 proto_tree_add_item(tree, hf_hs20_anqp_reserved, tvb, offset, 1,
6464 ENC_LITTLE_ENDIAN0x80000000);
6465 offset++;
6466
6467 switch (subtype) {
6468 case HS20_ANQP_HS_QUERY_LIST1:
6469 dissect_hs20_anqp_hs_query_list(tree, tvb, offset, end);
6470 break;
6471 case HS20_ANQP_HS_CAPABILITY_LIST2:
6472 dissect_hs20_anqp_hs_capability_list(tree, tvb, offset, end);
6473 break;
6474 case HS20_ANQP_OPERATOR_FRIENDLY_NAME3:
6475 dissect_hs20_anqp_operator_friendly_name(tree, tvb, pinfo, offset, end);
6476 break;
6477 case HS20_ANQP_WAN_METRICS4:
6478 dissect_hs20_anqp_wan_metrics(tree, tvb, offset, request);
6479 break;
6480 case HS20_ANQP_CONNECTION_CAPABILITY5:
6481 dissect_hs20_anqp_connection_capability(tree, tvb, offset, end);
6482 break;
6483 case HS20_ANQP_NAI_HOME_REALM_QUERY6:
6484 dissect_hs20_anqp_nai_home_realm_query(tree, tvb, pinfo, offset, end);
6485 break;
6486 case HS20_ANQP_OPERATING_CLASS_INDICATION7:
6487 dissect_hs20_anqp_oper_class_indic(tree, tvb, offset, end);
6488 break;
6489 default:
6490 if (offset == end)
6491 break;
6492 proto_tree_add_item(tree, hf_hs20_anqp_payload, tvb, offset,
6493 end - offset, ENC_NA0x00000000);
6494 break;
6495 }
6496}
6497
6498static int
6499dissect_anqp_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
6500 gboolean request, int idx)
6501{
6502 guint16 id, len;
6503 guint32 oui;
6504 proto_item *item;
6505
6506 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info_id,
6507 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
6508 id = tvb_get_letohs(tvb, offset);
6509 if (id != ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797) {
6510 if (idx == 0) {
6511 proto_item_append_text(tree, " - %s",
6512 val_to_str_ext(id, &anqp_info_id_vals_ext, "Unknown (%u)"));
6513 col_append_fstr(pinfo->cinfo, COL_INFO, " %s",
6514 val_to_str_ext(id, &anqp_info_id_vals_ext, "Unknown (%u)"));
6515 } else if (idx == 1) {
6516 proto_item_append_text(tree, ", ..");
6517 col_append_str(pinfo->cinfo, COL_INFO, ", ..");
6518 }
6519 }
6520 tree = proto_item_add_subtree(item, ett_gas_anqp);
6521 offset += 2;
6522 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info_length,
6523 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
6524 len = tvb_get_letohs(tvb, offset);
6525 offset += 2;
6526 if (tvb_reported_length_remaining(tvb, offset) < len) {
6527 expert_add_info(pinfo, tree, &ei_ieee80211_ff_anqp_info_length);
6528 return 4 + len;
6529 }
6530 switch (id)
6531 {
6532 case ANQP_INFO_ANQP_QUERY_LIST256:
6533 dissect_anqp_query_list(tree, tvb, pinfo, offset, offset + len);
6534 break;
6535 case ANQP_INFO_ANQP_CAPAB_LIST257:
6536 dissect_anqp_capab_list(tree, tvb, pinfo, offset, offset + len);
6537 break;
6538 case ANQP_INFO_VENUE_NAME_INFO258:
6539 dissect_venue_name_info(tree, tvb, pinfo, offset, offset + len);
6540 break;
6541 case ANQP_INFO_NETWORK_AUTH_TYPE_INFO260:
6542 dissect_network_auth_type(tree, tvb, offset, offset + len);
6543 break;
6544 case ANQP_INFO_ROAMING_CONSORTIUM_LIST261:
6545 dissect_roaming_consortium_list(tree, tvb, pinfo, offset, offset + len);
6546 break;
6547 case ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO262:
6548 dissect_ip_addr_type_availability_info(tree, tvb, offset);
6549 break;
6550 case ANQP_INFO_NAI_REALM_LIST263:
6551 dissect_nai_realm_list(tree, tvb, pinfo, offset, offset + len);
6552 break;
6553 case ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO264:
6554 dissect_3gpp_cellular_network_info(tree, tvb, pinfo, offset);
6555 break;
6556 case ANQP_INFO_DOMAIN_NAME_LIST268:
6557 dissect_domain_name_list(tree, tvb, offset, offset + len);
6558 break;
6559 case ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797:
6560 oui = tvb_get_ntoh24(tvb, offset);
6561 proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA0x00000000);
6562 offset += 3;
6563
6564 switch (oui) {
6565 case OUI_WFA0x506F9A:
6566 proto_tree_add_item(tree, hf_ieee80211_anqp_wfa_subtype, tvb, offset, 1,
6567 ENC_NA0x00000000);
6568 switch (tvb_get_guint8(tvb, offset)) {
6569 case WFA_SUBTYPE_P2P9:
6570 dissect_wifi_p2p_anqp(pinfo, tree, tvb, offset + 1, request);
6571 break;
6572 case WFA_SUBTYPE_HS20_ANQP17:
6573 dissect_hs20_anqp(tree, tvb, pinfo, offset + 1, offset + len - 3, request,
6574 idx);
6575 break;
6576 }
6577 break;
6578 default:
6579 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info,
6580 tvb, offset, len, ENC_NA0x00000000);
6581 break;
6582 }
6583 break;
6584 default:
6585 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info,
6586 tvb, offset, len, ENC_NA0x00000000);
6587 break;
6588 }
6589
6590 return 4 + len;
6591}
6592
6593static void
6594dissect_anqp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, gboolean request)
6595{
6596 int idx = 0;
6597
6598 proto_item_append_text(tree, ": ANQP ");
6599 proto_item_append_text(tree, request ? "Request" : "Response");
6600 if (tvb_reported_length_remaining(tvb, offset) < 4) {
6601 expert_add_info_format(pinfo, tree, &ei_ieee80211_not_enough_room_for_anqp_header,
6602 "Not enough room for ANQP header");
6603 return;
6604 }
6605 col_append_fstr(pinfo->cinfo, COL_INFO, ", ANQP %s",
6606 request ? "Req" : "Resp");
6607 while (tvb_reported_length_remaining(tvb, offset) > 0) {
6608 offset += dissect_anqp_info(tree, tvb, pinfo, offset, request, idx);
6609 idx += 1;
6610 }
6611}
6612
6613static guint
6614dissect_gas_initial_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
6615 gboolean anqp)
6616{
6617 guint16 req_len;
6618 int start = offset;
6619 proto_item *item;
6620 proto_tree *query;
6621
6622 /* Query Request Length (2 octets) */
6623 req_len = tvb_get_letohs(tvb, offset);
6624
6625 query = proto_tree_add_subtree(tree, tvb, offset, 2 + req_len, ett_gas_query, &item, "Query Request");
6626 if (tvb_reported_length_remaining(tvb, offset) < 2 + req_len) {
6627 expert_add_info(pinfo, item, &ei_ieee80211_ff_query_request_length);
6628 return tvb_reported_length_remaining(tvb, offset);
6629 }
6630
6631 proto_tree_add_item(query, hf_ieee80211_ff_query_request_length,
6632 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
6633 offset += 2;
6634 /*
6635 * Query Request (GAS query; formatted per protocol specified in the
6636 * Advertisement Protocol IE)
6637 */
6638 if (anqp)
6639 dissect_anqp(query, tvb, pinfo, offset, TRUE(!(0)));
6640 else
6641 proto_tree_add_item(query, hf_ieee80211_ff_query_request,
6642 tvb, offset, req_len, ENC_NA0x00000000);
6643 offset += req_len;
6644
6645 return offset - start;
6646}
6647
6648static guint
6649dissect_gas_initial_response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
6650 gboolean anqp)
6651{
6652 guint16 resp_len;
6653 int start = offset;
6654 proto_item *item;
6655 proto_tree *query;
6656
6657 /* Query Response Length (2 octets) */
6658 resp_len = tvb_get_letohs(tvb, offset);
6659
6660 query = proto_tree_add_subtree(tree, tvb, offset, 2 + resp_len,
6661 ett_gas_query, &item, "Query Response");
6662 if (tvb_reported_length_remaining(tvb, offset) < 2 + resp_len) {
6663 expert_add_info(pinfo, item, &ei_ieee80211_ff_query_response_length);
6664 return tvb_reported_length_remaining(tvb, offset);
6665 }
6666
6667 proto_tree_add_item(query, hf_ieee80211_ff_query_response_length,
6668 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
6669 offset += 2;
6670 /* Query Response (optional) */
6671 if (resp_len) {
6672 if (anqp)
6673 dissect_anqp(query, tvb, pinfo, offset, FALSE(0));
6674 else
6675 proto_tree_add_item(query, hf_ieee80211_ff_query_response,
6676 tvb, offset, resp_len, ENC_NA0x00000000);
6677 offset += resp_len;
6678 }
6679
6680 return offset - start;
6681}
6682
6683static reassembly_table gas_reassembly_table;
6684
6685static void
6686ieee80211_gas_reassembly_init(void)
6687{
6688 reassembly_table_init(&gas_reassembly_table,
6689 &addresses_reassembly_table_functions);
6690}
6691
6692static gint ett_gas_resp_fragment = -1;
6693static gint ett_gas_resp_fragments = -1;
6694
6695static int hf_ieee80211_gas_resp_fragments = -1;
6696static int hf_ieee80211_gas_resp_fragment = -1;
6697static int hf_ieee80211_gas_resp_fragment_overlap = -1;
6698static int hf_ieee80211_gas_resp_fragment_overlap_conflict = -1;
6699static int hf_ieee80211_gas_resp_fragment_multiple_tails = -1;
6700static int hf_ieee80211_gas_resp_fragment_too_long_fragment = -1;
6701static int hf_ieee80211_gas_resp_fragment_error = -1;
6702static int hf_ieee80211_gas_resp_fragment_count = -1;
6703static int hf_ieee80211_gas_resp_reassembled_in = -1;
6704static int hf_ieee80211_gas_resp_reassembled_length = -1;
6705
6706static const fragment_items gas_resp_frag_items = {
6707 &ett_gas_resp_fragment,
6708 &ett_gas_resp_fragments,
6709 &hf_ieee80211_gas_resp_fragments,
6710 &hf_ieee80211_gas_resp_fragment,
6711 &hf_ieee80211_gas_resp_fragment_overlap,
6712 &hf_ieee80211_gas_resp_fragment_overlap_conflict,
6713 &hf_ieee80211_gas_resp_fragment_multiple_tails,
6714 &hf_ieee80211_gas_resp_fragment_too_long_fragment,
6715 &hf_ieee80211_gas_resp_fragment_error,
6716 &hf_ieee80211_gas_resp_fragment_count,
6717 &hf_ieee80211_gas_resp_reassembled_in,
6718 &hf_ieee80211_gas_resp_reassembled_length,
6719 /* Reassembled data field */
6720 NULL((void*)0),
6721 "GAS Response fragments"
6722};
6723
6724static guint
6725dissect_gas_comeback_response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
6726 gboolean anqp, guint8 frag, gboolean more,
6727 guint8 dialog_token)
6728{
6729 guint16 resp_len;
6730 int start = offset;
6731 proto_item *item;
6732 proto_tree *query;
6733
6734 /* Query Response Length (2 octets) */
6735 resp_len = tvb_get_letohs(tvb, offset);
6736
6737 query = proto_tree_add_subtree(tree, tvb, offset, 2 + resp_len,
6738 ett_gas_query, &item, "Query Response");
6739 if (tvb_reported_length_remaining(tvb, offset) < 2 + resp_len) {
6740 expert_add_info(pinfo, item, &ei_ieee80211_ff_query_response_length);
6741 return tvb_reported_length_remaining(tvb, offset);
6742 }
6743
6744 proto_tree_add_item(query, hf_ieee80211_ff_query_response_length,
6745 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
6746 offset += 2;
6747 /* Query Response (optional) */
6748 if (resp_len) {
6749 if (anqp && (frag == 0) && !more)
6750 dissect_anqp(query, tvb, pinfo, offset, FALSE(0));
6751 else {
6752 fragment_head *frag_msg;
6753 gboolean save_fragmented;
6754 tvbuff_t *new_tvb;
6755
6756 save_fragmented = pinfo->fragmented;
6757 pinfo->fragmented = TRUE(!(0));
6758 frag_msg = fragment_add_seq_check(&gas_reassembly_table, tvb, offset,
6759 pinfo, dialog_token, NULL((void*)0),
6760 frag, resp_len, more);
6761 new_tvb = process_reassembled_data(tvb, offset, pinfo,
6762 "Reassembled GAS Query Response",
6763 frag_msg, &gas_resp_frag_items,
6764 NULL((void*)0), tree);
6765 if (new_tvb) {
6766 if (anqp)
6767 dissect_anqp(query, new_tvb, pinfo, 0, FALSE(0));
6768 else
6769 proto_tree_add_item(query, hf_ieee80211_ff_query_response,
6770 new_tvb, 0,
6771 tvb_reported_length_remaining(new_tvb, 0),
6772 ENC_NA0x00000000);
6773 }
6774
6775 /* The old tvb cannot be used anymore */
6776 ieee80211_tvb_invalid = TRUE(!(0));
6777
6778 pinfo->fragmented = save_fragmented;
6779 }
6780 offset += resp_len;
6781 }
6782
6783 return offset - start;
6784}
6785
6786/* ************************************************************************* */
6787/* Dissect and add fixed mgmt fields to protocol tree */
6788/* ************************************************************************* */
6789
6790static guint64 last_timestamp;
6791
6792static guint
6793add_ff_timestamp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
6794{
6795 last_timestamp = tvb_get_letoh64(tvb, offset);
6796 proto_tree_add_item(tree, hf_ieee80211_ff_timestamp, tvb, offset, 8,
6797 ENC_LITTLE_ENDIAN0x80000000);
6798 return 8;
6799}
6800
6801static guint
6802add_ff_beacon_interval(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
6803{
6804 proto_tree_add_item(tree, hf_ieee80211_ff_beacon_interval, tvb, offset, 2,
6805 ENC_LITTLE_ENDIAN0x80000000);
6806 col_append_fstr(pinfo->cinfo, COL_INFO, ", BI=%d",
6807 tvb_get_letohs(tvb, offset));
6808 return 2;
6809}
6810
6811static guint
6812add_ff_cap_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
6813{
6814 proto_item *cap_item;
6815 proto_tree *cap_tree;
6816
6817 cap_item = proto_tree_add_item(tree, hf_ieee80211_ff_capture, tvb, offset, 2,
6818 ENC_LITTLE_ENDIAN0x80000000);
6819 cap_tree = proto_item_add_subtree(cap_item, ett_cap_tree);
6820
6821 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_ess, tvb, offset, 2,
6822 ENC_LITTLE_ENDIAN0x80000000);
6823 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_ibss, tvb, offset, 2,
6824 ENC_LITTLE_ENDIAN0x80000000);
6825 if ((tvb_get_letohs(tvb, offset) & 0x0001) != 0) {
6826 /* This is an AP */
6827 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_ap_poll, tvb, offset, 2,
6828 ENC_LITTLE_ENDIAN0x80000000);
6829 } else {
6830 /* This is a STA */
6831 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_sta_poll, tvb, offset, 2,
6832 ENC_LITTLE_ENDIAN0x80000000);
6833 }
6834
6835 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_privacy, tvb, offset, 2,
6836 ENC_LITTLE_ENDIAN0x80000000);
6837 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_preamble, tvb, offset, 2,
6838 ENC_LITTLE_ENDIAN0x80000000);
6839 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_pbcc, tvb, offset, 2,
6840 ENC_LITTLE_ENDIAN0x80000000);
6841 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_agility, tvb, offset, 2,
6842 ENC_LITTLE_ENDIAN0x80000000);
6843 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_spec_man, tvb, offset, 2,
6844 ENC_LITTLE_ENDIAN0x80000000);
6845 proto_tree_add_item(cap_tree, hf_ieee80211_ff_short_slot_time, tvb, offset,
6846 2, ENC_LITTLE_ENDIAN0x80000000);
6847 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_apsd, tvb, offset, 2,
6848 ENC_LITTLE_ENDIAN0x80000000);
6849 proto_tree_add_item(cap_tree, hf_ieee80211_ff_radio_measurement, tvb, offset, 2,
6850 ENC_LITTLE_ENDIAN0x80000000);
6851 proto_tree_add_item(cap_tree, hf_ieee80211_ff_dsss_ofdm, tvb, offset, 2,
6852 ENC_LITTLE_ENDIAN0x80000000);
6853 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_del_blk_ack, tvb, offset, 2,
6854 ENC_LITTLE_ENDIAN0x80000000);
6855 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_imm_blk_ack, tvb, offset, 2,
6856 ENC_LITTLE_ENDIAN0x80000000);
6857 return 2;
6858}
6859
6860static guint
6861add_ff_auth_alg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
6862{
6863 proto_tree_add_item(tree, hf_ieee80211_ff_auth_alg, tvb, offset, 2,
6864 ENC_LITTLE_ENDIAN0x80000000);
6865 return 2;
6866}
6867
6868static guint
6869add_ff_auth_trans_seq(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
6870{
6871 proto_tree_add_item(tree, hf_ieee80211_ff_auth_seq, tvb, offset, 2,
6872 ENC_LITTLE_ENDIAN0x80000000);
6873 return 2;
6874}
6875
6876static guint
6877add_ff_current_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
6878{
6879 proto_tree_add_item(tree, hf_ieee80211_ff_current_ap, tvb, offset, 6,
6880 ENC_NA0x00000000);
6881 return 6;
6882}
6883
6884static guint
6885add_ff_listen_ival(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
6886{
6887 proto_tree_add_item(tree, hf_ieee80211_ff_listen_ival, tvb, offset, 2,
6888 ENC_LITTLE_ENDIAN0x80000000);
6889 return 2;
6890}
6891
6892static guint
6893add_ff_reason_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
6894{
6895 proto_tree_add_item(tree, hf_ieee80211_ff_reason, tvb, offset, 2,
6896 ENC_LITTLE_ENDIAN0x80000000);
6897 return 2;
6898}
6899
6900static guint
6901add_ff_assoc_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
6902{
6903 proto_tree_add_item(tree, hf_ieee80211_ff_assoc_id, tvb, offset, 2,
6904 ENC_LITTLE_ENDIAN0x80000000);
6905 return 2;
6906}
6907
6908static guint
6909add_ff_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
6910{
6911 proto_tree_add_item(tree, hf_ieee80211_ff_status_code, tvb, offset, 2,
6912 ENC_LITTLE_ENDIAN0x80000000);
6913 return 2;
6914}
6915
6916static guint
6917add_ff_category_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
6918{
6919 proto_tree_add_item(tree, hf_ieee80211_ff_category_code, tvb, offset, 1,
6920 ENC_LITTLE_ENDIAN0x80000000);
6921 return 1;
6922}
6923
6924static guint
6925add_ff_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
6926{
6927 proto_tree_add_item(tree, hf_ieee80211_ff_action_code, tvb, offset, 1,
6928 ENC_LITTLE_ENDIAN0x80000000);
6929 return 1;
6930}
6931
6932static guint
6933add_ff_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
6934{
6935 proto_tree_add_item(tree, hf_ieee80211_ff_dialog_token, tvb, offset, 1,
6936 ENC_LITTLE_ENDIAN0x80000000);
6937 return 1;
6938}
6939
6940static guint
6941add_ff_followup_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
6942{
6943 proto_tree_add_item(tree, hf_ieee80211_ff_followup_dialog_token, tvb, offset, 1,
6944 ENC_LITTLE_ENDIAN0x80000000);
6945 return 1;
6946}
6947
6948static guint
6949add_ff_wme_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
6950{
6951 proto_tree_add_item(tree, hf_ieee80211_ff_wme_action_code, tvb, offset, 1,
6952 ENC_LITTLE_ENDIAN0x80000000);
6953 return 1;
6954}
6955
6956static guint
6957add_ff_wme_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
6958{
6959 proto_tree_add_item(tree, hf_ieee80211_ff_wme_status_code, tvb, offset, 1,
6960 ENC_LITTLE_ENDIAN0x80000000);
6961 return 1;
6962}
6963
6964static guint
6965add_ff_qos_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
6966{
6967 proto_tree_add_item(tree, hf_ieee80211_ff_qos_action_code, tvb, offset, 1,
6968 ENC_LITTLE_ENDIAN0x80000000);
6969 return 1;
6970}
6971
6972static guint
6973add_ff_block_ack_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
6974{
6975 proto_tree_add_item(tree, hf_ieee80211_ff_ba_action, tvb, offset, 1,
6976 ENC_LITTLE_ENDIAN0x80000000);
6977 return 1;
6978}
6979
6980static guint
6981add_ff_block_ack_param(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
6982{
6983 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_block_ack_params,
6984 ett_ff_ba_param_tree,
6985 ieee80211_ff_block_ack_params_fields,
6986 ENC_LITTLE_ENDIAN0x80000000);
6987 return 2;
6988}
6989
6990static guint
6991add_ff_block_ack_timeout(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
6992{
6993 proto_tree_add_item(tree, hf_ieee80211_ff_block_ack_timeout, tvb, offset, 2,
6994 ENC_LITTLE_ENDIAN0x80000000);
6995 return 2;
6996}
6997
6998static guint
6999add_ff_block_ack_ssc(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7000{
7001 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_block_ack_ssc,
7002 ett_ff_ba_ssc_tree, ieee80211_ff_block_ack_ssc_fields,
7003 ENC_LITTLE_ENDIAN0x80000000);
7004 return 2;
7005}
7006
7007static guint
7008add_ff_qos_ts_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7009{
7010 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_tsinfo,
7011 ett_tsinfo_tree, ieee80211_tsinfo_fields,
7012 ENC_LITTLE_ENDIAN0x80000000);
7013 return 3;
7014}
7015
7016static guint
7017add_ff_mesh_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7018{
7019 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_action, tvb, offset, 1,
7020 ENC_LITTLE_ENDIAN0x80000000);
7021 return 1;
7022}
7023
7024static guint
7025add_ff_multihop_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7026{
7027 proto_tree_add_item(tree, hf_ieee80211_ff_multihop_action, tvb, offset, 1,
7028 ENC_LITTLE_ENDIAN0x80000000);
7029 return 1;
7030}
7031
7032static guint
7033add_ff_mesh_control(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7034{
7035 int start = offset;
7036 guint8 flags;
7037
7038 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_flags, tvb, offset, 1,
7039 ENC_LITTLE_ENDIAN0x80000000);
7040 flags = tvb_get_guint8(tvb, offset);
7041 offset += 1;
7042 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_ttl, tvb, offset, 1,
7043 ENC_LITTLE_ENDIAN0x80000000);
7044 offset += 1;
7045 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_sequence, tvb, offset, 4,
7046 ENC_LITTLE_ENDIAN0x80000000);
7047 offset += 4;
7048
7049 switch (flags & 0x03) {
7050 case 1:
7051 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr4, tvb, offset, 6,
7052 ENC_NA0x00000000);
7053 offset += 6;
7054 break;
7055 case 2:
7056 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr5, tvb, offset, 6,
7057 ENC_NA0x00000000);
7058 offset += 6;
7059 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr6, tvb, offset, 6,
7060 ENC_NA0x00000000);
7061 offset += 6;
7062 break;
7063 case 3:
7064 proto_item_append_text(tree, " Unknown Address Extension Mode");
7065 break;
7066 default:
7067 /* no default action */
7068 break;
7069 }
7070
7071 return offset - start;
7072}
7073
7074static guint
7075add_ff_selfprot_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7076{
7077 proto_tree_add_item(tree, hf_ieee80211_ff_selfprot_action, tvb, offset, 1,
7078 ENC_LITTLE_ENDIAN0x80000000);
7079 return 1;
7080}
7081
7082static guint
7083add_ff_dls_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7084{
7085 proto_tree_add_item(tree, hf_ieee80211_ff_dls_action_code, tvb, offset, 1,
7086 ENC_LITTLE_ENDIAN0x80000000);
7087 return 1;
7088}
7089
7090static guint
7091add_ff_dst_mac_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7092{
7093 proto_tree_add_item(tree, hf_ieee80211_ff_dst_mac_addr, tvb, offset, 6,
7094 ENC_NA0x00000000);
7095 return 6;
7096}
7097
7098static guint
7099add_ff_src_mac_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7100{
7101 proto_tree_add_item(tree, hf_ieee80211_ff_src_mac_addr, tvb, offset, 6,
7102 ENC_NA0x00000000);
7103 return 6;
7104}
7105
7106static guint
7107add_ff_req_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7108{
7109 proto_tree_add_item(tree, hf_ieee80211_ff_req_ap_addr, tvb, offset, 6,
7110 ENC_NA0x00000000);
7111 return 6;
7112}
7113
7114static guint
7115add_ff_res_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7116{
7117 proto_tree_add_item(tree, hf_ieee80211_ff_res_ap_addr, tvb, offset, 6,
7118 ENC_NA0x00000000);
7119 return 6;
7120}
7121
7122static guint
7123add_ff_check_beacon(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7124{
7125 proto_tree_add_item(tree, hf_ieee80211_ff_check_beacon, tvb, offset, 1,
7126 ENC_NA0x00000000);
7127 return 1;
7128}
7129
7130static guint
7131add_ff_tod(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7132{
7133 proto_tree_add_item(tree, hf_ieee80211_ff_tod, tvb, offset, 4,
7134 ENC_NA0x00000000);
7135 return 4;
7136}
7137
7138static guint
7139add_ff_toa(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7140{
7141 proto_tree_add_item(tree, hf_ieee80211_ff_toa, tvb, offset, 4,
7142 ENC_NA0x00000000);
7143 return 4;
7144}
7145
7146static guint
7147add_ff_max_tod_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7148{
7149 proto_tree_add_item(tree, hf_ieee80211_ff_max_tod_err, tvb, offset, 1,
7150 ENC_NA0x00000000);
7151 return 1;
7152}
7153
7154static guint
7155add_ff_max_toa_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7156{
7157 proto_tree_add_item(tree, hf_ieee80211_ff_max_toa_err, tvb, offset, 1,
7158 ENC_NA0x00000000);
7159 return 1;
7160}
7161
7162static guint
7163add_ff_dls_timeout(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7164{
7165 proto_tree_add_item(tree, hf_ieee80211_ff_dls_timeout, tvb, offset, 2,
7166 ENC_LITTLE_ENDIAN0x80000000);
7167 return 2;
7168}
7169
7170static guint
7171add_ff_delba_param_set(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7172{
7173 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_delba_param,
7174 ett_ff_ba_param_tree, ieee80211_ff_delba_param_fields,
7175 ENC_LITTLE_ENDIAN0x80000000);
7176 return 2;
7177}
7178
7179static guint
7180add_ff_max_reg_pwr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7181{
7182 proto_tree_add_item(tree, hf_ieee80211_ff_max_reg_pwr, tvb, offset, 2,
7183 ENC_LITTLE_ENDIAN0x80000000);
7184 return 2;
7185}
7186
7187static guint
7188add_ff_measurement_pilot_int(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7189{
7190 proto_tree_add_item(tree, hf_ieee80211_ff_measurement_pilot_int, tvb, offset,
7191 2, ENC_LITTLE_ENDIAN0x80000000);
7192 return 2;
7193}
7194
7195static guint
7196add_ff_country_str(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7197{
7198 proto_tree_add_item(tree, hf_ieee80211_ff_country_str, tvb, offset, 3,
7199 ENC_ASCII0x00000000|ENC_NA0x00000000);
7200 return 3;
7201}
7202
7203static guint
7204add_ff_max_tx_pwr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7205{
7206 proto_tree_add_item(tree, hf_ieee80211_ff_max_tx_pwr, tvb, offset, 1,
7207 ENC_LITTLE_ENDIAN0x80000000);
7208 return 1;
7209}
7210
7211static guint
7212add_ff_tx_pwr_used(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7213{
7214 proto_tree_add_item(tree, hf_ieee80211_ff_tx_pwr_used, tvb, offset, 1,
7215 ENC_LITTLE_ENDIAN0x80000000);
7216 return 1;
7217}
7218
7219static guint
7220add_ff_transceiver_noise_floor(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7221{
7222 proto_tree_add_item(tree, hf_ieee80211_ff_transceiver_noise_floor, tvb,
7223 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
7224 return 1;
7225}
7226
7227static guint
7228add_ff_channel_width(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7229{
7230 proto_tree_add_item(tree, hf_ieee80211_ff_channel_width, tvb, offset, 1,
7231 ENC_LITTLE_ENDIAN0x80000000);
7232 return 1;
7233}
7234
7235/* QoS Info: 802.11-2012 8.4.1.17 */
7236static guint
7237add_ff_qos_info_ap(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7238{
7239 /* From AP so decode as AP: Figure 8-51-QoS Info field when sent by a AP */
7240 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_qos_info_ap,
7241 ett_ff_qos_info, ieee80211_ff_qos_info_ap_fields,
7242 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
7243 return 1;
7244}
7245
7246
7247/* QoS Info: 802.11-2012 8.4.1.17 */
7248static guint
7249add_ff_qos_info_sta(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7250{
7251 /* To AP so decode as STA: Figure 8-52-QoS Info field when set by a non-AP STA */
7252 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_qos_info_sta,
7253 ett_ff_qos_info, ieee80211_ff_qos_info_sta_fields,
7254 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
7255 return 1;
7256}
7257
7258static guint
7259add_ff_sm_pwr_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7260{
7261 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_sm_pwr_save,
7262 ett_ff_sm_pwr_save, ieee80211_ff_sw_pwr_save_fields,
7263 ENC_LITTLE_ENDIAN0x80000000);
7264 return 1;
7265}
7266
7267static guint
7268add_ff_pco_phase_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7269{
7270 proto_tree_add_item(tree, hf_ieee80211_ff_pco_phase_cntrl, tvb, offset, 1,
7271 ENC_LITTLE_ENDIAN0x80000000);
7272 return 1;
7273}
7274
7275static guint
7276add_ff_psmp_param_set(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7277{
7278 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_psmp_param_set,
7279 ett_ff_psmp_param_set,
7280 ieee80211_ff_psmp_param_set_fields,
7281 ENC_LITTLE_ENDIAN0x80000000);
7282 return 2;
7283}
7284
7285static guint
7286add_ff_mimo_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7287{
7288 proto_item *mimo_item;
7289 proto_tree *mimo_tree;
7290
7291 mimo_item = proto_tree_add_item(tree, hf_ieee80211_ff_mimo_cntrl, tvb,
7292 offset, 6, ENC_NA0x00000000);
7293 mimo_tree = proto_item_add_subtree(mimo_item, ett_ff_mimo_cntrl);
7294
7295 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_nc_index, tvb,
7296 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
7297 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_nr_index, tvb,
7298 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
7299 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_channel_width, tvb,
7300 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
7301 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_grouping, tvb,
7302 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
7303 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_coefficient_size,
7304 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
7305 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_codebook_info, tvb,
7306 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
7307 proto_tree_add_item(mimo_tree,
7308 hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment, tvb,
7309 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
7310 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_reserved, tvb,
7311 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
7312
7313 offset += 2;
7314 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_sounding_timestamp,
7315 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
7316
7317 return 6;
7318}
7319
7320static guint
7321add_ff_ant_selection(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7322{
7323 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_ant_selection,
7324 ett_ff_ant_sel, ieee80211_ff_ant_selection_fields,
7325 ENC_LITTLE_ENDIAN0x80000000);
7326 return 1;
7327}
7328
7329static guint
7330add_ff_extended_channel_switch_announcement(proto_tree *tree, tvbuff_t *tvb,
7331 packet_info *pinfo _U___attribute__((unused)), int offset)
7332{
7333 proto_tree_add_bitmask(tree, tvb, offset,
7334 hf_ieee80211_ff_ext_channel_switch_announcement,
7335 ett_ff_chan_switch_announce,
7336 ieee80211_ff_ext_channel_switch_announcement_fields,
7337 ENC_LITTLE_ENDIAN0x80000000);
7338 return 4;
7339}
7340
7341static guint
7342add_ff_ht_information(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7343{
7344 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_ht_info,
7345 ett_ff_ht_info, ieee80211_ff_ht_info_fields,
7346 ENC_LITTLE_ENDIAN0x80000000);
7347 return 1;
7348}
7349
7350static guint
7351add_ff_ht_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7352{
7353 proto_tree_add_item(tree, hf_ieee80211_ff_ht_action, tvb, offset, 1,
7354 ENC_LITTLE_ENDIAN0x80000000);
7355 return 1;
7356}
7357
7358static guint
7359add_ff_dmg_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7360{
7361 proto_tree_add_item(tree, hf_ieee80211_ff_dmg_action_code, tvb, offset, 1,
7362 ENC_LITTLE_ENDIAN0x80000000);
7363 return 1;
7364}
7365
7366static guint
7367add_ff_dmg_pwr_mgmt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7368{
7369 proto_tree_add_item(tree, hf_ieee80211_ff_dmg_pwr_mgmt, tvb, offset, 1,
7370 ENC_LITTLE_ENDIAN0x80000000);
7371 return 1;
7372}
7373
7374static guint
7375add_ff_psmp_sta_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7376{
7377 proto_item *psmp_item;
7378 proto_tree *psmp_tree;
7379
7380 psmp_item = proto_tree_add_item(tree, hf_ieee80211_ff_psmp_sta_info, tvb,
7381 offset, 8, ENC_LITTLE_ENDIAN0x80000000);
7382 psmp_tree = proto_item_add_subtree(psmp_item, ett_ff_psmp_sta_info);
7383
7384 proto_tree_add_item(psmp_item, hf_ieee80211_ff_psmp_sta_info_type, tvb,
7385 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
7386
7387 switch (tvb_get_letohl(tvb, offset) & PSMP_STA_INFO_FLAG_TYPE0x00000003) {
7388 case PSMP_STA_INFO_BROADCAST0:
7389 proto_tree_add_item(psmp_tree,
7390 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
7391 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
7392 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
7393 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
7394 /* Missing 64 bit bitmask... */
7395 proto_tree_add_uint64(psmp_tree,
7396 hf_ieee80211_ff_psmp_sta_info_reserved_large,
7397 tvb, offset, 8,
7398 (tvb_get_letoh64(tvb, offset) &
7399 G_GUINT64_CONSTANT(0xFFFFFFFFFFE00000)(0xFFFFFFFFFFE00000UL)) >> 21);
7400 break;
7401 case PSMP_STA_INFO_MULTICAST1:
7402 proto_tree_add_item(psmp_tree,
7403 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
7404 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
7405 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
7406 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
7407 /* Missing 64 bit bitmask... */
7408 proto_tree_add_uint64(psmp_tree,
7409 hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id,
7410 tvb, offset, 6,
7411 (tvb_get_letoh64(tvb, offset) &
7412 G_GUINT64_CONSTANT(0xFFFFFFFFFFE00000)(0xFFFFFFFFFFE00000UL)) >> 21);
7413 break;
7414 case PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED2:
7415 proto_tree_add_item(psmp_tree,
7416 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
7417 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
7418 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
7419 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
7420 offset += 2;
7421 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_sta_id, tvb,
7422 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
7423 offset += 2;
7424
7425 proto_tree_add_item(psmp_tree,
7426 hf_ieee80211_ff_psmp_sta_info_utt_start_offset,
7427 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
7428 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_utt_duration,
7429 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
7430 proto_tree_add_item(psmp_tree,
7431 hf_ieee80211_ff_psmp_sta_info_reserved_small, tvb,
7432 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
7433 break;
7434 }
7435
7436 return 8;
7437}
7438
7439static guint
7440add_ff_schedule_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7441{
7442 proto_item *sched_item;
7443 proto_tree *sched_tree;
7444
7445 sched_item = proto_tree_add_item(tree, hf_ieee80211_sched_info, tvb, offset,
7446 2, ENC_LITTLE_ENDIAN0x80000000);
7447 sched_tree = proto_item_add_subtree(sched_item, ett_sched_tree);
7448
7449 proto_tree_add_item(sched_tree, hf_ieee80211_sched_info_agg, tvb, offset, 2,
7450 ENC_LITTLE_ENDIAN0x80000000);
7451 if (tvb_get_letohs(tvb, offset) & 0x0001) {
7452 proto_tree_add_item(sched_tree, hf_ieee80211_sched_info_tsid, tvb, offset,
7453 2, ENC_LITTLE_ENDIAN0x80000000);
7454 proto_tree_add_item(sched_tree, hf_ieee80211_sched_info_dir, tvb, offset,
7455 2, ENC_LITTLE_ENDIAN0x80000000);
7456 }
7457
7458 return 2;
7459}
7460
7461static guint
7462add_ff_pa_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7463{
7464 proto_tree_add_item(tree, hf_ieee80211_ff_public_action, tvb, offset, 1,
7465 ENC_LITTLE_ENDIAN0x80000000);
7466 return 1;
7467}
7468
7469static guint
7470add_ff_ppa_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7471{
7472 proto_tree_add_item(tree, hf_ieee80211_ff_protected_public_action, tvb, offset, 1,
7473 ENC_LITTLE_ENDIAN0x80000000);
7474 return 1;
7475}
7476
7477static guint
7478add_ff_ft_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7479{
7480 proto_tree_add_item(tree, hf_ieee80211_ff_ft_action_code, tvb, offset, 1,
7481 ENC_LITTLE_ENDIAN0x80000000);
7482 return 1;
7483}
7484
7485static guint
7486add_ff_sta_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7487{
7488 proto_tree_add_item(tree, hf_ieee80211_ff_sta_address, tvb, offset, 6,
7489 ENC_NA0x00000000);
7490 return 6;
7491}
7492
7493static guint
7494add_ff_target_ap_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7495{
7496 proto_tree_add_item(tree, hf_ieee80211_ff_target_ap_address, tvb, offset, 6,
7497 ENC_NA0x00000000);
7498 return 6;
7499}
7500
7501static guint
7502add_ff_gas_comeback_delay(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7503{
7504 proto_tree_add_item(tree, hf_ieee80211_ff_gas_comeback_delay, tvb, offset, 2,
7505 ENC_LITTLE_ENDIAN0x80000000);
7506 return 2;
7507}
7508
7509static guint
7510add_ff_gas_fragment_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7511{
7512 proto_tree_add_item(tree, hf_ieee80211_ff_gas_fragment_id, tvb, offset, 1,
7513 ENC_LITTLE_ENDIAN0x80000000);
7514 proto_tree_add_item(tree, hf_ieee80211_ff_more_gas_fragments, tvb, offset, 1,
7515 ENC_LITTLE_ENDIAN0x80000000);
7516 return 1;
7517}
7518
7519static guint
7520add_ff_sa_query_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7521{
7522 proto_tree_add_item(tree, hf_ieee80211_ff_sa_query_action_code, tvb, offset,
7523 1, ENC_LITTLE_ENDIAN0x80000000);
7524 return 1;
7525}
7526
7527static guint
7528add_ff_transaction_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7529{
7530 proto_tree_add_item(tree, hf_ieee80211_ff_transaction_id, tvb, offset, 2,
7531 ENC_LITTLE_ENDIAN0x80000000);
7532 return 2;
7533}
7534
7535static guint
7536add_ff_tdls_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7537{
7538 guint8 code;
7539 code = tvb_get_guint8(tvb, offset);
7540 col_set_str(pinfo->cinfo, COL_INFO,
7541 val_to_str_ext_const(code, &tdls_action_codes_ext,
7542 "Unknown TDLS Action"));
7543 proto_tree_add_item(tree, hf_ieee80211_ff_tdls_action_code, tvb, offset, 1,
7544 ENC_LITTLE_ENDIAN0x80000000);
7545 return 1;
7546}
7547
7548static guint
7549add_ff_target_channel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7550{
7551 proto_tree_add_item(tree, hf_ieee80211_ff_target_channel, tvb, offset, 1,
7552 ENC_LITTLE_ENDIAN0x80000000);
7553 return 1;
7554}
7555
7556static guint
7557add_ff_operating_class(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7558{
7559 proto_tree_add_item(tree, hf_ieee80211_ff_operating_class, tvb, offset, 1,
7560 ENC_LITTLE_ENDIAN0x80000000);
7561 return 1;
7562}
7563
7564static guint
7565add_ff_wnm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7566{
7567 guint8 code;
7568
7569 code = tvb_get_guint8(tvb, offset);
7570 col_set_str(pinfo->cinfo, COL_INFO,
7571 val_to_str_ext_const(code, &wnm_action_codes_ext, "Unknown WNM Action"));
7572 proto_tree_add_item(tree, hf_ieee80211_ff_wnm_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
7573 return 1;
7574}
7575
7576static guint
7577add_ff_unprotected_wnm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7578{
7579 guint8 code;
7580
7581 code = tvb_get_guint8(tvb, offset);
7582 col_set_str(pinfo->cinfo, COL_INFO,
7583 val_to_str_ext_const(code, &unprotected_wnm_action_codes_ext, "Unknown Unprotected WNM Action"));
7584 proto_tree_add_item(tree, hf_ieee80211_ff_unprotected_wnm_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
7585 return 1;
7586}
7587
7588static guint
7589add_ff_unprotected_dmg_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7590{
7591 proto_tree_add_item(tree, hf_ieee80211_ff_unprotected_dmg_action_code, tvb, offset, 1, ENC_NA0x00000000);
7592 return 1;
7593}
7594
7595static guint
7596add_ff_key_data_length(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7597{
7598 proto_tree_add_item(tree, hf_ieee80211_ff_key_data_length, tvb, offset, 2,
7599 ENC_LITTLE_ENDIAN0x80000000);
7600 return 2;
7601}
7602
7603static guint
7604add_ff_wnm_notification_type(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7605{
7606 proto_tree_add_item(tree, hf_ieee80211_ff_wnm_notification_type,
7607 tvb, offset, 1, ENC_NA0x00000000);
7608 return 1;
7609}
7610
7611/* Action frame: Radio Measurement actions */
7612static guint
7613add_ff_rm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7614{
7615 proto_tree_add_item(tree, hf_ieee80211_ff_rm_action_code, tvb, offset, 1, ENC_NA0x00000000);
7616 return 1;
7617}
7618
7619static guint
7620add_ff_rm_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7621{
7622 proto_tree_add_item(tree, hf_ieee80211_ff_rm_dialog_token, tvb, offset, 1, ENC_NA0x00000000);
7623 return 1;
7624}
7625
7626/* Radio Measurement Request frame, Action fields */
7627static guint
7628add_ff_rm_repetitions(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7629{
7630 /* Note: 65535 means repeated until cancelled or superseded */
7631 proto_tree_add_item(tree, hf_ieee80211_ff_rm_repetitions, tvb, offset, 2,
7632 ENC_BIG_ENDIAN0x00000000);
7633 return 2;
7634}
7635
7636/* Link Measurement Request frame, Action fields*/
7637static guint
7638add_ff_rm_tx_power(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7639{
7640 /* In dBm, see 8.4.1.20 */
7641 proto_tree_add_item(tree, hf_ieee80211_ff_rm_tx_power, tvb, offset, 1, ENC_NA0x00000000);
7642 return 1;
7643}
7644
7645static guint
7646add_ff_rm_max_tx_power(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7647{
7648 /* In dBm, see 8.4.1.19 */
7649 proto_tree_add_item(tree, hf_ieee80211_ff_rm_max_tx_power, tvb, offset, 1, ENC_NA0x00000000);
7650 return 1;
7651}
7652
7653/* Link Measurement Report frame, Action fields */
7654static guint
7655add_ff_rm_tpc_report(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7656{
7657 proto_tree *tpc_tree;
7658 proto_item *tpc_item;
7659
7660 /* 8.4.2.19 TPC Report element */
7661 tpc_item = proto_tree_add_item(tree, hf_ieee80211_ff_tpc, tvb, offset, 4, ENC_NA0x00000000);
7662 tpc_tree = proto_item_add_subtree(tpc_item, ett_tpc);
7663 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_element_id, tvb, offset, 1, ENC_NA0x00000000);
7664 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_length, tvb, offset + 1, 1, ENC_NA0x00000000);
7665 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_tx_power, tvb, offset + 2, 1, ENC_NA0x00000000);
7666 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_link_margin, tvb, offset + 3, 1, ENC_NA0x00000000);
7667 return 4;
7668}
7669
7670static guint
7671add_ff_rm_rx_antenna_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7672{
7673 /* 8.4.2.42: 0 means unknown, 1-254 is valid, 255 means multiple antennas */
7674 proto_tree_add_item(tree, hf_ieee80211_ff_rm_rx_antenna_id, tvb, offset, 1, ENC_NA0x00000000);
7675 return 1;
7676}
7677
7678static guint
7679add_ff_rm_tx_antenna_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7680{
7681 /* 8.4.2.42: 0 means unknown, 1-254 is valid, 255 means multiple antennas */
7682 proto_tree_add_item(tree, hf_ieee80211_ff_rm_tx_antenna_id, tvb, offset, 1, ENC_NA0x00000000);
7683 return 1;
7684}
7685
7686static guint
7687add_ff_rm_rcpi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7688{
7689 /* 8.4.2.40: RCPI as specified for certain PHYs */
7690 proto_tree_add_item(tree, hf_ieee80211_ff_rm_rcpi, tvb, offset, 1, ENC_NA0x00000000);
7691 return 1;
7692}
7693
7694static guint
7695add_ff_rm_rsni(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7696{
7697 /* 8.4.2.43: RSNI in steps of 0.5 dB, calculated as:
7698 * RSNI = (10 * log10((RCPI_{power} - ANPI_{power}) / ANPI_{power}) + 20)*2 */
7699 proto_tree_add_item(tree, hf_ieee80211_ff_rm_rsni, tvb, offset, 1, ENC_NA0x00000000);
7700 return 1;
7701}
7702
7703static guint
7704add_ff_bss_transition_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7705{
7706 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_status_code, tvb, offset, 1,
7707 ENC_LITTLE_ENDIAN0x80000000);
7708 return 1;
7709}
7710
7711static guint
7712add_ff_bss_termination_delay(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
7713{
7714 proto_tree_add_item(tree, hf_ieee80211_ff_bss_termination_delay, tvb, offset, 1,
7715 ENC_LITTLE_ENDIAN0x80000000);
7716 return 1;
7717}
7718
7719static guint
7720add_ff_action_spectrum_mgmt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7721{
7722 switch (tvb_get_guint8(tvb, offset + 1)) {
7723 case SM_ACTION_MEASUREMENT_REQUEST0:
7724 case SM_ACTION_MEASUREMENT_REPORT1:
7725 case SM_ACTION_TPC_REQUEST2:
7726 case SM_ACTION_TPC_REPORT3:
7727 add_ff_category_code(tree, tvb, pinfo, offset);
7728 add_ff_action_code(tree, tvb, pinfo, offset + 1);
7729 add_ff_dialog_token(tree, tvb, pinfo, offset + 2);
7730 return 3;
7731 case SM_ACTION_CHAN_SWITCH_ANNC4:
7732 case SM_ACTION_EXT_CHAN_SWITCH_ANNC5:
7733 add_ff_category_code(tree, tvb, pinfo, offset);
7734 add_ff_action_code(tree, tvb, pinfo, offset + 1);
7735 return 2;
7736 default:
7737 add_ff_category_code(tree, tvb, pinfo, offset);
7738 add_ff_action_code(tree, tvb, pinfo, offset + 1);
7739 return 2;
7740 }
7741}
7742
7743static guint
7744add_ff_action_qos(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7745{
7746 switch (tvb_get_guint8(tvb, offset + 1)) {
7747 case QOS_ACTION_ADDTS_REQUEST0:
7748 add_ff_category_code(tree, tvb, pinfo, offset);
7749 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
7750 add_ff_dialog_token(tree, tvb, pinfo, offset + 2);
7751 return 3;
7752 case QOS_ACTION_ADDTS_RESPONSE1:
7753 add_ff_category_code(tree, tvb, pinfo, offset);
7754 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
7755 add_ff_dialog_token(tree, tvb, pinfo, offset + 2);
7756 add_ff_status_code(tree, tvb, pinfo, offset + 3);
7757 return 5;
7758 case QOS_ACTION_DELTS2:
7759 add_ff_category_code(tree, tvb, pinfo, offset);
7760 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
7761 add_ff_qos_ts_info(tree, tvb, pinfo, offset + 2);
7762 add_ff_reason_code(tree, tvb, pinfo, offset + 5);
7763 return 7;
7764 case QOS_ACTION_SCHEDULE3:
7765 add_ff_category_code(tree, tvb, pinfo, offset);
7766 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
7767 return 2;
7768 case QOS_ACTION_MAP_CONFIGURE4:
7769 add_ff_category_code(tree, tvb, pinfo, offset);
7770 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
7771 return 2;
7772 default:
7773 add_ff_category_code(tree, tvb, pinfo, offset);
7774 return 2;
7775 }
7776}
7777
7778static guint
7779add_ff_action_dls(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7780{
7781 switch (tvb_get_guint8(tvb, offset + 1)) {
7782 case DLS_ACTION_REQUEST0:
7783 add_ff_category_code(tree, tvb, pinfo, offset);
7784 add_ff_dls_action_code(tree, tvb, pinfo, offset + 1);
7785 add_ff_dst_mac_addr(tree, tvb, pinfo, offset + 2);
7786 add_ff_src_mac_addr(tree, tvb, pinfo, offset + 8);
7787 add_ff_cap_info(tree, tvb, pinfo, offset + 14);
7788 add_ff_dls_timeout(tree, tvb, pinfo, offset + 16);
7789 return 18;
7790 case DLS_ACTION_RESPONSE1:
7791 add_ff_category_code(tree, tvb, pinfo, offset);
7792 add_ff_dls_action_code(tree, tvb, pinfo, offset + 1);
7793 add_ff_status_code(tree, tvb, pinfo, offset + 2);
7794 add_ff_dst_mac_addr(tree, tvb, pinfo, offset + 4);
7795 add_ff_src_mac_addr(tree, tvb, pinfo, offset + 10);
7796 if (!hf_ieee80211_ff_status_code) {
7797 add_ff_cap_info(tree, tvb, pinfo, offset + 16);
7798 }
7799 return 16;
7800 case DLS_ACTION_TEARDOWN2:
7801 add_ff_category_code(tree, tvb, pinfo, offset);
7802 add_ff_dls_action_code(tree, tvb, pinfo, offset + 1);
7803 add_ff_dst_mac_addr(tree, tvb, pinfo, offset + 2);
7804 add_ff_src_mac_addr(tree, tvb, pinfo, offset + 8);
7805 add_ff_reason_code(tree, tvb, pinfo, offset + 14);
7806 return 16;
7807 default:
7808 add_ff_category_code(tree, tvb, pinfo, offset);
7809 return 2;
7810 }
7811}
7812
7813static guint
7814add_ff_action_block_ack(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7815{
7816 guint start = offset;
7817
7818 switch (tvb_get_guint8(tvb, offset + 1)) {
7819 case BA_ADD_BLOCK_ACK_REQUEST0:
7820 offset += add_ff_category_code(tree, tvb, pinfo, offset);
7821 offset += add_ff_block_ack_action_code(tree, tvb, pinfo, offset);
7822 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
7823 offset += add_ff_block_ack_param(tree, tvb, pinfo, offset);
7824 offset += add_ff_block_ack_timeout(tree, tvb, pinfo, offset);
7825 offset += add_ff_block_ack_ssc(tree, tvb, pinfo, offset);
7826 break;
7827 case BA_ADD_BLOCK_ACK_RESPONSE1:
7828 offset += add_ff_category_code(tree, tvb, pinfo, offset);
7829 offset += add_ff_block_ack_action_code(tree, tvb, pinfo, offset);
7830 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
7831 offset += add_ff_status_code(tree, tvb, pinfo, offset);
7832 offset += add_ff_block_ack_param(tree, tvb, pinfo, offset);
7833 offset += add_ff_block_ack_timeout(tree, tvb, pinfo, offset);
7834 break;
7835 case BA_DELETE_BLOCK_ACK2:
7836 offset += add_ff_category_code(tree, tvb, pinfo, offset);
7837 offset += add_ff_block_ack_action_code(tree, tvb, pinfo, offset);
7838 offset += add_ff_delba_param_set(tree, tvb, pinfo, offset);
7839 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
7840 break;
7841 }
7842
7843 return offset - start; /* Size of fixed fields */
7844}
7845
7846static guint
7847add_ff_action_public_fields(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, guint8 code)
7848{
7849 guint32 oui;
7850 guint8 subtype;
7851 gboolean anqp;
7852 guint8 dialog_token;
7853 guint8 frag;
7854 gboolean more;
7855
7856 guint start = offset;
7857
7858 switch (code) {
7859 case PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4:
7860 offset += add_ff_extended_channel_switch_announcement(tree, tvb, pinfo, offset);
7861 break;
7862 case PA_VENDOR_SPECIFIC9:
7863 oui = tvb_get_ntoh24(tvb, offset);
7864 proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA0x00000000);
7865 offset += 3;
7866 switch (oui) {
7867 case OUI_WFA0x506F9A:
7868 subtype = tvb_get_guint8(tvb, offset);
7869 proto_tree_add_item(tree, hf_ieee80211_tag_oui_wfa_subtype, tvb, offset, 1, ENC_NA0x00000000);
7870 offset += 1;
7871 if (subtype == WFA_SUBTYPE_P2P9) {
7872 offset = dissect_wifi_p2p_public_action(pinfo, tree, tvb, offset);
7873 }
7874 break;
7875 default:
7876 /* Don't know how to handle this vendor */
7877 break;
7878 }
7879 break;
7880 case PA_GAS_INITIAL_REQUEST10:
7881 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
7882 offset += dissect_advertisement_protocol(pinfo, tree, tvb, offset,
7883 &anqp);
7884 offset += dissect_gas_initial_request(tree, tvb, pinfo, offset, anqp);
7885 break;
7886 case PA_GAS_INITIAL_RESPONSE11:
7887 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
7888 offset += add_ff_status_code(tree, tvb, pinfo, offset);
7889 offset += add_ff_gas_comeback_delay(tree, tvb, pinfo, offset);
7890 offset += dissect_advertisement_protocol(pinfo, tree, tvb, offset,
7891 &anqp);
7892 offset += dissect_gas_initial_response(tree, tvb, pinfo, offset, anqp);
7893 break;
7894 case PA_GAS_COMEBACK_REQUEST12:
7895 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
7896 break;
7897 case PA_GAS_COMEBACK_RESPONSE13:
7898 dialog_token = tvb_get_guint8(tvb, offset);
7899 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
7900 offset += add_ff_status_code(tree, tvb, pinfo, offset);
7901 frag = tvb_get_guint8(tvb, offset) & 0x7f;
7902 more = (tvb_get_guint8(tvb, offset) & 0x80) != 0;
7903 offset += add_ff_gas_fragment_id(tree, tvb, pinfo, offset);
7904 offset += add_ff_gas_comeback_delay(tree, tvb, pinfo, offset);
7905 offset += dissect_advertisement_protocol(pinfo, tree, tvb, offset,
7906 &anqp);
7907 offset += dissect_gas_comeback_response(tree, tvb, pinfo, offset, anqp, frag,
7908 more, dialog_token);
7909 break;
7910 case PA_TDLS_DISCOVERY_RESPONSE14:
7911 col_set_str(pinfo->cinfo, COL_PROTOCOL, "TDLS");
7912 col_set_str(pinfo->cinfo, COL_INFO, "TDLS Discovery Response");
7913 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
7914 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
7915 break;
7916 case PA_QAB_REQUEST16:
7917 case PA_QAB_RESPONSE17:
7918 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
7919 offset += add_ff_req_ap_addr(tree, tvb, pinfo, offset);
7920 offset += add_ff_res_ap_addr(tree, tvb, pinfo, offset);
7921 break;
7922 }
7923
7924 return offset - start; /* Size of fixed fields */
7925}
7926
7927static guint
7928add_ff_action_public(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7929{
7930 guint8 code;
7931 guint start = offset;
7932 offset += add_ff_category_code(tree, tvb, pinfo, offset);
7933 code = tvb_get_guint8(tvb, offset);
7934 offset += add_ff_pa_action_code(tree, tvb, pinfo, offset);
7935 offset += add_ff_action_public_fields(tree, tvb, pinfo, offset, code);
7936 return offset - start;
7937}
7938
7939static guint
7940add_ff_action_protected_public(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7941{
7942 guint8 code;
7943 guint start = offset;
7944 offset += add_ff_category_code(tree, tvb, pinfo, offset);
7945 code = tvb_get_guint8(tvb, offset);
7946 offset += add_ff_ppa_action_code(tree, tvb, pinfo, offset);
7947 offset += add_ff_action_public_fields(tree, tvb, pinfo, offset, code);
7948 return offset - start;
7949}
7950
7951static guint
7952add_ff_action_radio_measurement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7953{
7954 guint start = offset;
7955 guint8 code;
7956
7957 offset += add_ff_category_code(tree, tvb, pinfo, offset);
7958 code = tvb_get_guint8(tvb, offset);
7959 offset += add_ff_rm_action_code(tree, tvb, pinfo, offset);
7960
7961 switch (code) {
7962 case RM_ACTION_RADIO_MEASUREMENT_REQUEST0:
7963 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
7964 offset += add_ff_rm_repetitions(tree, tvb, pinfo, offset);
7965 /* Followed by Measurement Request Elements */
7966 break;
7967 case RM_ACTION_RADIO_MEASUREMENT_REPORT1:
7968 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
7969 /* Followed by Measurement Report Elements */
7970 break;
7971 case RM_ACTION_LINK_MEASUREMENT_REQUEST2:
7972 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
7973 offset += add_ff_rm_tx_power(tree, tvb, pinfo, offset);
7974 offset += add_ff_rm_max_tx_power(tree, tvb, pinfo, offset);
7975 /* Followed by Optional Subelements */
7976 break;
7977 case RM_ACTION_LINK_MEASUREMENT_REPORT3:
7978 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
7979 offset += add_ff_rm_tpc_report(tree, tvb, pinfo, offset);
7980 offset += add_ff_rm_rx_antenna_id(tree, tvb, pinfo, offset);
7981 offset += add_ff_rm_tx_antenna_id(tree, tvb, pinfo, offset);
7982 offset += add_ff_rm_rcpi(tree, tvb, pinfo, offset);
7983 offset += add_ff_rm_rsni(tree, tvb, pinfo, offset);
7984 /* Followed by Optional Subelements */
7985 break;
7986 case RM_ACTION_NEIGHBOR_REPORT_REQUEST4:
7987 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
7988 /* Followed by Optional Subelements */
7989 break;
7990 case RM_ACTION_NEIGHBOR_REPORT_RESPONSE5:
7991 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
7992 /* Followed by Neighbor Report Elements */
7993 break;
7994 }
7995
7996 return offset - start; /* Size of fixed fields */
7997}
7998
7999static guint
8000add_ff_action_fast_bss_transition(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8001{
8002 guint start = offset;
8003 guint8 code;
8004
8005 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8006 code = tvb_get_guint8(tvb, offset);
8007 offset += add_ff_ft_action_code(tree, tvb, pinfo, offset);
8008
8009 switch (code) {
8010 case FT_ACTION_REQUEST1:
8011 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
8012 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
8013 /* Followed by FT Request frame body (IEs) */
8014 break;
8015 case FT_ACTION_RESPONSE2:
8016 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
8017 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
8018 offset += add_ff_status_code(tree, tvb, pinfo, offset);
8019 /* Followed by FT Response frame body (IEs) */
8020 break;
8021 case FT_ACTION_CONFIRM3:
8022 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
8023 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
8024 /* Followed by FT Confirm frame body (IEs) */
8025 break;
8026 case FT_ACTION_ACK4:
8027 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
8028 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
8029 offset += add_ff_status_code(tree, tvb, pinfo, offset);
8030 /* Followed by FT Ack frame body (IEs) */
8031 break;
8032 }
8033
8034 return offset - start; /* Size of fixed fields */
8035}
8036
8037static guint
8038add_ff_action_sa_query(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8039{
8040 guint start = offset;
8041 guint8 code;
8042
8043 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8044 code = tvb_get_guint8(tvb, offset);
8045 offset += add_ff_sa_query_action_code(tree, tvb, pinfo, offset);
8046
8047 switch (code) {
8048 case SA_QUERY_REQUEST0:
8049 offset += add_ff_transaction_id(tree, tvb, pinfo, offset);
8050 break;
8051 case SA_QUERY_RESPONSE1:
8052 offset += add_ff_transaction_id(tree, tvb, pinfo, offset);
8053 break;
8054 }
8055
8056 return offset - start; /* Size of fixed fields */
8057}
8058
8059static guint
8060add_ff_action_mesh(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8061{
8062 guint length;
8063
8064 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8065 offset += add_ff_mesh_action(tree, tvb, pinfo, offset);
8066 /* The only fixed fields are the category and mesh action. The rest are IEs.
8067 */
8068 length = 2;
8069 if (tvb_get_guint8(tvb, 1) == MESH_ACTION_TBTT_ADJ_RESPONSE10) {
8070 /* ..except for the TBTT Adjustment Response, which has a status code field
8071 */
8072 length += add_ff_status_code(tree, tvb, pinfo, offset);
8073 }
8074 return length;
8075}
8076
8077static guint
8078add_ff_action_multihop(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8079{
8080 guint start = offset;
8081
8082 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8083 offset += add_ff_multihop_action(tree, tvb, pinfo, offset);
8084 offset += add_ff_mesh_control(tree, tvb, pinfo, offset);
8085 return offset - start;
8086}
8087
8088static guint
8089add_ff_action_self_protected(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8090{
8091 guint start = offset;
8092
8093 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8094 offset += add_ff_selfprot_action(tree, tvb, pinfo, offset);
8095
8096 switch (tvb_get_guint8(tvb, start + 1)) {
8097 case SELFPROT_ACTION_MESH_PEERING_OPEN1:
8098 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
8099 break;
8100 case SELFPROT_ACTION_MESH_PEERING_CONFIRM2:
8101 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
8102 offset += add_ff_assoc_id(tree, tvb, pinfo, offset);
8103 break;
8104 }
8105
8106 return offset - start;
8107}
8108
8109static guint
8110add_ff_vht_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8111{
8112 proto_tree_add_item(tree, hf_ieee80211_ff_vht_action, tvb, offset, 1,
8113 ENC_LITTLE_ENDIAN0x80000000);
8114 return 1;
8115}
8116
8117
8118static guint
8119wnm_bss_trans_mgmt_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8120{
8121 int start = offset;
8122 guint8 mode;
8123 gint left;
8124
8125 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8126
8127 mode = tvb_get_guint8(tvb, offset);
8128 proto_tree_add_item(tree, hf_ieee80211_ff_request_mode_pref_cand,
8129 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
8130 proto_tree_add_item(tree, hf_ieee80211_ff_request_mode_abridged,
8131 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
8132 proto_tree_add_item(tree, hf_ieee80211_ff_request_mode_disassoc_imminent,
8133 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
8134 proto_tree_add_item(tree, hf_ieee80211_ff_request_mode_bss_term_included,
8135 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
8136 proto_tree_add_item(tree, hf_ieee80211_ff_request_mode_ess_disassoc_imminent,
8137 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
8138 offset += 1;
8139
8140 proto_tree_add_item(tree, hf_ieee80211_ff_disassoc_timer, tvb, offset, 2,
8141 ENC_LITTLE_ENDIAN0x80000000);
8142 offset += 2;
8143
8144 proto_tree_add_item(tree, hf_ieee80211_ff_validity_interval, tvb, offset, 1,
8145 ENC_LITTLE_ENDIAN0x80000000);
8146 offset += 1;
8147
8148 if (mode & 0x08) {
8149 proto_tree_add_item(tree, hf_ieee80211_ff_bss_termination_duration,
8150 tvb, offset, 8, ENC_NA0x00000000);
8151 offset += 8;
8152 }
8153
8154 if (mode & 0x10) {
8155 guint8 url_len;
8156 url_len = tvb_get_guint8(tvb, offset);
8157 proto_tree_add_item(tree, hf_ieee80211_ff_url_len, tvb, offset, 1,
8158 ENC_LITTLE_ENDIAN0x80000000);
8159 offset += 1;
8160 proto_tree_add_item(tree, hf_ieee80211_ff_url, tvb, offset, url_len,
8161 ENC_ASCII0x00000000|ENC_NA0x00000000);
8162 offset += url_len;
8163 }
8164
8165 left = tvb_reported_length_remaining(tvb, offset);
8166 if (left > 0) {
8167 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_candidate_list_entries,
8168 tvb, offset, left, ENC_NA0x00000000);
8169 offset += left;
8170 }
8171
8172 return offset - start;
8173}
8174
8175
8176static guint
8177wnm_bss_trans_mgmt_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8178{
8179 int start = offset;
8180 guint8 code;
8181 gint left;
8182
8183 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8184 code = tvb_get_guint8(tvb, offset);
8185 offset += add_ff_bss_transition_status_code(tree, tvb, pinfo, offset);
8186 offset += add_ff_bss_termination_delay(tree, tvb, pinfo, offset);
8187 if (!code) {
8188 proto_tree_add_item(tree, hf_ieee80211_ff_target_bss,
8189 tvb, offset, 6, ENC_NA0x00000000);
8190 offset += 6;
8191 }
8192 left = tvb_reported_length_remaining(tvb, offset);
8193 if (left > 0) {
8194 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_candidate_list_entries,
8195 tvb, offset, left, ENC_NA0x00000000);
8196 offset += left;
8197 }
8198
8199 return offset - start;
8200}
8201
8202static guint
8203wnm_sleep_mode_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8204{
8205 int start = offset;
8206 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8207 return offset - start;
8208}
8209
8210static guint
8211wnm_sleep_mode_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8212{
8213 int start = offset;
8214 guint16 key_data_len;
8215 gint left;
8216
8217 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8218 key_data_len = tvb_get_letohs(tvb, offset);
8219 offset += add_ff_key_data_length(tree, tvb, pinfo, offset);
8220 left = tvb_reported_length_remaining(tvb, offset);
8221 if (left < key_data_len) {
8222 expert_add_info(pinfo, tree, &ei_ieee80211_tag_wnm_sleep_mode_no_key_data);
8223 return offset - start;
8224 }
8225 proto_tree_add_item(tree, hf_ieee80211_ff_key_data, tvb, offset,
8226 key_data_len, ENC_NA0x00000000);
8227 offset += key_data_len;
8228 return offset - start;
8229}
8230
8231static guint
8232wnm_tfs_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8233{
8234 int start = offset;
8235 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8236 return offset - start;
8237}
8238
8239static guint
8240wnm_tfs_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8241{
8242 int start = offset;
8243 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8244 return offset - start;
8245}
8246
8247static guint
8248wnm_notification_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8249{
8250 int start = offset;
8251 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8252 offset += add_ff_wnm_notification_type(tree, tvb, pinfo, offset);
8253 return offset - start;
8254}
8255
8256static guint
8257add_ff_action_wnm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8258{
8259 guint8 code;
8260 guint start = offset;
8261
8262 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8263 code = tvb_get_guint8(tvb, offset);
8264 offset += add_ff_wnm_action_code(tree, tvb, pinfo, offset);
8265 switch (code) {
8266 case WNM_BSS_TRANS_MGMT_REQ:
8267 offset += wnm_bss_trans_mgmt_req(tree, tvb, pinfo, offset);
8268 break;
8269 case WNM_BSS_TRANS_MGMT_RESP:
8270 offset += wnm_bss_trans_mgmt_resp(tree, tvb, pinfo, offset);
8271 break;
8272 case WNM_TFS_REQ:
8273 offset += wnm_tfs_req(tree, tvb, pinfo, offset);
8274 break;
8275 case WNM_TFS_RESP:
8276 offset += wnm_tfs_resp(tree, tvb, pinfo, offset);
8277 break;
8278 case WNM_SLEEP_MODE_REQ:
8279 offset += wnm_sleep_mode_req(tree, tvb, pinfo, offset);
8280 break;
8281 case WNM_SLEEP_MODE_RESP:
8282 offset += wnm_sleep_mode_resp(tree, tvb, pinfo, offset);
8283 break;
8284 case WNM_NOTIFICATION_REQ:
8285 offset += wnm_notification_req(tree, tvb, pinfo, offset);
8286 break;
8287 }
8288
8289 return offset - start; /* Size of fixed fields */
8290}
8291
8292static guint
8293add_ff_action_unprotected_wnm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8294{
8295 guint8 code;
8296 guint start = offset;
8297
8298 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8299 code = tvb_get_guint8(tvb, offset);
8300 offset += add_ff_unprotected_wnm_action_code(tree, tvb, pinfo, offset);
8301
8302 switch (code) {
8303 case UNPROTECTED_WNM_TIM:
8304 offset += add_ff_check_beacon(tree, tvb, pinfo, offset);
8305 offset += add_ff_timestamp(tree, tvb, pinfo, offset);
8306 offset += add_ff_tod(tree, tvb, pinfo, offset);
8307 offset += add_ff_toa(tree, tvb, pinfo, offset);
8308 offset += add_ff_max_tod_err(tree, tvb, pinfo, offset);
8309 offset += add_ff_max_toa_err(tree, tvb, pinfo, offset);
8310 break;
8311 case UNPROTECTED_WNM_TIMING_MEASUREMENT:
8312 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8313 offset += add_ff_followup_dialog_token(tree, tvb, pinfo, offset);
8314 break;
8315 }
8316
8317 return offset - start; /* Size of fixed fields */
8318}
8319
8320static guint
8321add_ff_action_tdls(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8322{
8323 guint8 code;
8324 guint16 status;
8325 guint start = offset;
8326
8327 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8328 code = tvb_get_guint8(tvb, offset);
8329 offset += add_ff_tdls_action_code(tree, tvb, pinfo, offset);
8330 switch (code) {
8331 case TDLS_SETUP_REQUEST0:
8332 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8333 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
8334 break;
8335 case TDLS_SETUP_RESPONSE1:
8336 status = tvb_get_letohs(tvb, offset);
8337 offset += add_ff_status_code(tree, tvb, pinfo, offset);
8338 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8339 if (tvb_reported_length_remaining(tvb, offset) < 2) {
8340 if (status == 0) {
8341 expert_add_info(pinfo, tree, &ei_ieee80211_tdls_setup_response_malformed);
8342 }
8343 break;
8344 }
8345 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
8346 break;
8347 case TDLS_SETUP_CONFIRM2:
8348 status = tvb_get_letohs(tvb, offset);
8349 offset += add_ff_status_code(tree, tvb, pinfo, offset);
8350 if (tvb_reported_length_remaining(tvb, offset) < 1) {
8351 if (status == 0) {
8352 expert_add_info(pinfo, tree, &ei_ieee80211_tdls_setup_confirm_malformed);
8353 }
8354 break;
8355 }
8356 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8357 break;
8358 case TDLS_TEARDOWN3:
8359 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
8360 break;
8361 case TDLS_PEER_TRAFFIC_INDICATION4:
8362 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8363 break;
8364 case TDLS_CHANNEL_SWITCH_REQUEST5:
8365 offset += add_ff_target_channel(tree, tvb, pinfo, offset);
8366 offset += add_ff_operating_class(tree, tvb, pinfo, offset);
8367 break;
8368 case TDLS_CHANNEL_SWITCH_RESPONSE6:
8369 offset += add_ff_status_code(tree, tvb, pinfo, offset);
8370 break;
8371 case TDLS_PEER_PSM_REQUEST7:
8372 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8373 break;
8374 case TDLS_PEER_PSM_RESPONSE8:
8375 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8376 offset += add_ff_status_code(tree, tvb, pinfo, offset);
8377 break;
8378 case TDLS_PEER_TRAFFIC_RESPONSE9:
8379 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8380 break;
8381 case TDLS_DISCOVERY_REQUEST10:
8382 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8383 break;
8384 }
8385
8386 return offset - start; /* Size of fixed fields */
8387}
8388
8389static guint
8390add_ff_action_mgmt_notification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8391{
8392 guint start = offset;
8393
8394 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8395 offset += add_ff_wme_action_code(tree, tvb, pinfo, offset);
8396 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8397 offset += add_ff_wme_status_code(tree, tvb, pinfo, offset);
8398
8399 return offset - start; /* Size of fixed fields */
8400}
8401
8402static guint
8403add_ff_action_vendor_specific(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8404{
8405 guint start = offset;
8406 guint32 oui;
8407 guint8 subtype;
8408
8409 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8410 oui = tvb_get_ntoh24(tvb, offset);
8411 proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA0x00000000);
8412 offset += 3;
8413 switch (oui) {
8414 case OUI_MARVELL0x005043:
8415 offset = dissect_vendor_action_marvell(tree, tvb, offset);
8416 break;
8417 case OUI_WFA0x506F9A:
8418 subtype = tvb_get_guint8(tvb, offset);
8419 proto_tree_add_item(tree, hf_ieee80211_tag_oui_wfa_subtype, tvb, offset, 1, ENC_NA0x00000000);
8420 offset += 1;
8421 if (subtype == WFA_SUBTYPE_P2P9) {
8422 offset = dissect_wifi_p2p_action(tree, tvb, offset);
8423 }
8424 break;
8425 default:
8426 /* Don't know how to handle this vendor */
8427 break;
8428 }
8429
8430 return offset - start; /* Size of fixed fields */
8431}
8432
8433static guint
8434add_ff_action_ht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8435{
8436 guint start = offset;
8437 guint8 n_sta, i;
8438 mimo_control_t mimo_cntrl;
8439
8440 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8441 offset += add_ff_ht_action_code(tree, tvb, pinfo, offset);
8442
8443 switch (tvb_get_guint8(tvb, offset - 1)) {
8444 case HT_ACTION_NOTIFY_CHAN_WIDTH0:
8445 offset += add_ff_channel_width(tree, tvb, pinfo, offset);
8446 break;
8447 case HT_ACTION_SM_PWR_SAVE1:
8448 offset += add_ff_sm_pwr_cntrl(tree, tvb, pinfo, offset);
8449 break;
8450 case HT_ACTION_PSMP_ACTION2:
8451 n_sta = tvb_get_guint8(tvb, offset);
8452 offset += add_ff_psmp_param_set(tree, tvb, pinfo, offset);
8453 for (i = 0; i < (n_sta & 0x0F); i++) {
8454 offset += add_ff_psmp_sta_info(tree, tvb, pinfo, offset);
8455 }
8456 break;
8457 case HT_ACTION_SET_PCO_PHASE3:
8458 offset += add_ff_pco_phase_cntrl(tree, tvb, pinfo, offset);
8459 break;
8460 case HT_ACTION_MIMO_CSI4:
8461 mimo_cntrl = get_mimo_control(tvb, offset);
8462 offset += add_ff_mimo_cntrl(tree, tvb, pinfo, offset);
8463 offset += add_mimo_csi_matrices_report(tree, tvb, offset, mimo_cntrl);
8464 break;
8465 case HT_ACTION_MIMO_BEAMFORMING5:
8466 mimo_cntrl = get_mimo_control(tvb, offset);
8467 offset += add_ff_mimo_cntrl(tree, tvb, pinfo, offset);
8468 offset += add_mimo_beamforming_feedback_report(tree, tvb, offset,
8469 mimo_cntrl);
8470 break;
8471 case HT_ACTION_MIMO_COMPRESSED_BEAMFORMING6:
8472 mimo_cntrl = get_mimo_control(tvb, offset);
8473 offset += add_ff_mimo_cntrl(tree, tvb, pinfo, offset);
8474 offset += add_mimo_compressed_beamforming_feedback_report(tree, tvb,
8475 offset,
8476 mimo_cntrl);
8477 break;
8478 case HT_ACTION_ANT_SEL_FEEDBACK7:
8479 offset += add_ff_ant_selection(tree, tvb, pinfo, offset);
8480 break;
8481 case HT_ACTION_HT_INFO_EXCHANGE8:
8482 offset += add_ff_ht_information(tree, tvb, pinfo, offset);
8483 break;
8484 }
8485
8486 return offset - start;
8487}
8488
8489static guint
8490add_ff_beacon_interval_ctrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8491{
8492 proto_item *bic_item = proto_tree_add_item(tree, hf_ieee80211_ff_bic, tvb, offset, 6, ENC_LITTLE_ENDIAN0x80000000);
8493 proto_tree *bic_tree = proto_item_add_subtree(bic_item, ett_bic_tree);
8494
8495 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_cc_present, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
8496 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_discovery_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
8497 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_next_beacon, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
8498 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_ati_present, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
8499 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_abft_len, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
8500 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_fss, tvb, offset+1, 1, ENC_LITTLE_ENDIAN0x80000000);
8501 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_is_resp, tvb, offset+1, 1, ENC_LITTLE_ENDIAN0x80000000);
8502 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_next_abft, tvb, offset+1, 2, ENC_LITTLE_ENDIAN0x80000000);
8503 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_frag_txss, tvb, offset+2, 1, ENC_LITTLE_ENDIAN0x80000000);
8504 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_txss_span, tvb, offset+2, 2, ENC_LITTLE_ENDIAN0x80000000);
8505 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_NBI_abft, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
8506 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_abft_count, tvb, offset+3, 2, ENC_LITTLE_ENDIAN0x80000000);
8507 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_nabft, tvb, offset+4, 2, ENC_LITTLE_ENDIAN0x80000000);
8508 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_pcp, tvb, offset+5, 1, ENC_LITTLE_ENDIAN0x80000000);
8509 return 6;
8510}
8511
8512static guint
8513add_ff_beamforming_ctrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8514{
8515 gboolean isGrant = *((gboolean*)(p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_CTRL_GRANT_OR_GRANT_ACK_KEY2)));
8516 proto_item *bf_item = proto_tree_add_item(tree, hf_ieee80211_ff_bf, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
8517 proto_tree *bf_tree = proto_item_add_subtree(bf_item, ett_bf_tree);
8518 guint16 bf_field = tvb_get_letohs(tvb, offset);
8519 gboolean isInit = (bf_field & 0x2) >> 1;
8520 gboolean isResp = (bf_field & 0x4) >> 2;
8521 proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_train, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
8522 proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_is_init, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
8523 proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_is_resp, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
8524 if((isInit==TRUE(!(0))) && (isResp==TRUE(!(0))) && isGrant) {
8525 proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_num_sectors, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
8526 proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_num_rx_dmg_ants, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
8527 } else {
8528 proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_rxss_len, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
8529 proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_rxss_rate, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
8530 }
8531 return 2;
8532}
8533
8534static guint
8535add_ff_dynamic_allocation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8536{
8537 proto_item *dynamic_alloc_item = proto_tree_add_item(tree, hf_ieee80211_ff_dynamic_allocation, tvb, offset, 5, ENC_LITTLE_ENDIAN0x80000000);
8538 proto_tree *dynamic_alloc_tree = proto_item_add_subtree(dynamic_alloc_item, ett_dynamic_alloc_tree);
8539 proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_TID, tvb, offset, 1, ENC_NA0x00000000);
8540 proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_alloc_type, tvb, offset, 1, ENC_NA0x00000000);
8541 proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_src_aid, tvb, offset, 1, ENC_NA0x00000000);
8542 proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_dest_aid, tvb, offset, 1, ENC_NA0x00000000);
8543 proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_alloc_duration, tvb, offset, 1, ENC_NA0x00000000);
8544 return 5;
8545}
8546
8547static guint
8548add_ff_beamformed_link(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8549{
8550 proto_item *blm_item = proto_tree_add_item(tree, hf_ieee80211_ff_blm, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
8551 proto_tree *blm_tree = proto_item_add_subtree(blm_item, ett_blm_tree);
8552 proto_tree_add_item(blm_tree, hf_ieee80211_ff_blm_unit_index, tvb, offset, 1, ENC_NA0x00000000);
8553 proto_tree_add_item(blm_tree, hf_ieee80211_ff_blm_maint_value, tvb, offset, 1, ENC_NA0x00000000);
8554 proto_tree_add_item(blm_tree, hf_ieee80211_ff_blm_is_master, tvb, offset, 1, ENC_NA0x00000000);
8555 return 1;
8556}
8557
8558static guint
8559add_ff_BRP_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8560{
8561 proto_item *brp_req_item = proto_tree_add_item(tree, hf_ieee80211_ff_brp, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
8562 proto_tree *brp_req_tree = proto_item_add_subtree(brp_req_item, ett_brp_tree);
8563
8564 proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_L_RX, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
8565 proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_TX_TRN_REQ, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
8566 proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_MID_REQ, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
8567 proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_BC_REQ, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
8568 proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_MID_GRANT, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
8569 proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_BC_GRANT, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
8570 proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_chan_FBCK_CAP, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
8571 proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_tx_sector, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
8572 proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_other_aid, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
8573 proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_tx_antenna, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
8574 return 4;
8575}
8576
8577static guint
8578add_ff_sector_sweep_feedback(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8579{
8580 proto_item *sswf_item = proto_tree_add_item(tree, hf_ieee80211_ff_sswf, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
8581 proto_tree *sswf_tree = proto_item_add_subtree(sswf_item, ett_sswf_tree);
8582
8583 proto_tree_add_item(sswf_tree, hf_ieee80211_ff_sswf_total_sectors, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
8584 proto_tree_add_item(sswf_tree, hf_ieee80211_ff_sswf_num_rx_dmg_ants, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
8585 proto_tree_add_item(sswf_tree, hf_ieee80211_ff_sswf_poll_required, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
8586 return 3;
8587}
8588
8589static guint
8590add_ff_sector_sweep(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8591{
8592 proto_item *ssw_item = proto_tree_add_item(tree, hf_ieee80211_ff_ssw, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
8593 proto_tree *ssw_tree = proto_item_add_subtree(ssw_item, ett_ssw_tree);
8594
8595 proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_direction, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
8596 proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_cdown, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
8597 proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_sector_id, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
8598 proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_dmg_ant_id, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
8599 proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_rxss_len, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
8600 return 3;
8601}
8602
8603static guint
8604add_ff_dmg_params(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8605{
8606 proto_item *dmg_params_item = proto_tree_add_item(tree, hf_ieee80211_ff_dmg_params, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
8607 proto_tree *dmg_params_tree = proto_item_add_subtree(dmg_params_item, ett_dmg_params_tree);
8608
8609 proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_bss, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
8610 proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_cbap_only, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
8611 proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_cbap_src, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
8612 proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_privacy, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
8613 proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_policy, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
8614 return 1;
8615}
8616
8617static guint
8618add_ff_cc_field(proto_tree *tree, tvbuff_t *tvb, int offset, gboolean dis)
8619{
8620 proto_item *cc_item = proto_tree_add_item(tree, hf_ieee80211_ff_cc, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
8621 proto_tree *cc_tree = proto_item_add_subtree(cc_item, ett_cc_tree);
8622 guint64 cc_field;
8623 if(dis) {
8624 proto_tree_add_item(cc_tree, hf_ieee80211_ff_cc_abft_resp_addr, tvb, offset, 6, ENC_NA0x00000000);
8625 } else {
8626 cc_field = tvb_get_letoh64(tvb, offset);
8627 /*TODO : Add support of bitmask for FT_(U)INT64 */
8628 proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_sp_duration, tvb, offset, 1, (guint32)(cc_field & 0xff));
8629 proto_tree_add_uint64(cc_tree, hf_ieee80211_ff_cc_cluster_id, tvb, offset+1, 6, (guint64)((cc_field & G_GUINT64_CONSTANT(0x00ffffffffffff00)(0x00ffffffffffff00UL)) >> 8));
8630 proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_role, tvb, offset+7, 1, (guint32)((cc_field & G_GUINT64_CONSTANT(0x0300000000000000)(0x0300000000000000UL)) >> 56));
8631 proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_max_mem, tvb, offset+7, 1, (guint32)((cc_field & G_GUINT64_CONSTANT(0x7c00000000000000)(0x7c00000000000000UL)) >> 58));
8632 }
8633 return 8;
8634}
8635
8636
8637static guint
8638add_ff_band_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8639{
8640 proto_tree_add_item(tree, hf_ieee80211_ff_band_id, tvb, offset, 1, ENC_NA0x00000000);
8641 return 1;
8642}
8643
8644static guint
8645add_ff_subject_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8646{
8647 proto_tree_add_item(tree, hf_ieee80211_ff_subject_address, tvb, offset, 6, ENC_NA0x00000000);
8648 return 6;
8649}
8650
8651static guint
8652add_ff_handover_reason(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8653{
8654 proto_tree_add_item(tree, hf_ieee80211_ff_handover_reason, tvb, offset, 1, ENC_NA0x00000000);
8655 return 1;
8656}
8657
8658static guint
8659add_ff_handover_remaining_bi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8660{
8661 proto_tree_add_item(tree, hf_ieee80211_ff_handover_remaining_bi, tvb, offset, 1, ENC_NA0x00000000);
8662 return 1;
8663}
8664
8665static guint
8666add_ff_handover_result(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8667{
8668 proto_tree_add_item(tree, hf_ieee80211_ff_handover_result, tvb, offset, 1, ENC_NA0x00000000);
8669 return 1;
8670}
8671
8672static guint
8673add_ff_handover_reject_reason(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8674{
8675 proto_tree_add_item(tree, hf_ieee80211_ff_handover_reject_reason, tvb, offset, 1, ENC_NA0x00000000);
8676 return 1;
8677}
8678
8679static guint
8680add_ff_destination_reds_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8681{
8682 proto_tree_add_item(tree, hf_ieee80211_ff_destination_reds_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
8683 return 2;
8684}
8685
8686static guint
8687add_ff_destination_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8688{
8689 proto_tree_add_item(tree, hf_ieee80211_ff_destination_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
8690 return 2;
8691}
8692
8693static guint
8694add_ff_realy_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8695{
8696 proto_tree_add_item(tree, hf_ieee80211_ff_realy_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
8697 return 2;
8698}
8699
8700static guint
8701add_ff_source_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8702{
8703 proto_tree_add_item(tree, hf_ieee80211_ff_source_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
8704 return 2;
8705}
8706
8707static guint
8708add_ff_timing_offset(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8709{
8710 proto_tree_add_item(tree, hf_ieee80211_ff_timing_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
8711 return 2;
8712}
8713
8714static guint
8715add_ff_sampling_frequency_offset(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8716{
8717 proto_tree_add_item(tree, hf_ieee80211_ff_sampling_frequency_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
8718 return 2;
8719}
8720
8721static guint
8722add_ff_relay_operation_type(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8723{
8724 proto_tree_add_item(tree, hf_ieee80211_ff_relay_operation_type, tvb, offset, 1, ENC_NA0x00000000);
8725 return 1;
8726}
8727
8728static guint
8729add_ff_fst_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8730{
8731 proto_tree_add_item(tree, hf_ieee80211_ff_fst_action_code, tvb, offset, 1, ENC_NA0x00000000);
8732 return 1;
8733}
8734
8735static guint
8736add_ff_llt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8737{
8738 proto_tree_add_item(tree, hf_ieee80211_ff_llt, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
8739 return 4;
8740}
8741
8742static guint
8743add_ff_fsts_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8744{
8745 proto_tree_add_item(tree, hf_ieee80211_ff_fsts_id, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
8746 return 4;
8747}
8748
8749static guint
8750add_ff_oct_mmpdu(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8751{
8752 guint start = offset;
8753 guint len = tvb_get_letohs(tvb, offset);
8754 proto_tree_add_item(tree, hf_ieee80211_ff_mmpdu_len, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
8755 offset += 2;
8756 proto_tree_add_item(tree, hf_ieee80211_ff_mmpdu_ctrl, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
8757 offset += 2;
8758 proto_tree_add_item(tree, hf_ieee80211_ff_oct_mmpdu, tvb, offset, len, ENC_NA0x00000000);
8759 offset += len;
8760 return offset - start;
8761}
8762
8763static void
8764add_tag_relay_capabilities(packet_info *pinfo, proto_item *item, gint32 tag_len, proto_tree *tree, tvbuff_t *tvb, gint32 *offset) {
8765
8766 if (tag_len < 2) {
8767 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length, "Tag length must be 2");
8768 return;
8769 }
8770
8771 *offset += 2;
8772
8773 proto_tree_add_item(tree, hf_ieee80211_tag_relay_support, tvb, *offset, 1, ENC_NA0x00000000);
8774 proto_tree_add_item(tree, hf_ieee80211_tag_relay_use, tvb, *offset, 1, ENC_NA0x00000000);
8775 proto_tree_add_item(tree, hf_ieee80211_tag_relay_permission, tvb, *offset, 1, ENC_NA0x00000000);
8776 proto_tree_add_item(tree, hf_ieee80211_tag_AC_power, tvb, *offset, 1, ENC_NA0x00000000);
8777 proto_tree_add_item(tree, hf_ieee80211_tag_relay_prefer, tvb, *offset, 1, ENC_NA0x00000000);
8778 proto_tree_add_item(tree, hf_ieee80211_tag_duplex, tvb, *offset, 1, ENC_NA0x00000000);
8779 proto_tree_add_item(tree, hf_ieee80211_tag_cooperation, tvb, *offset, 1, ENC_NA0x00000000);
8780 *offset += 2;
8781 return;
8782}
8783
8784#if 0
8785static guint
8786add_ff_relay_capable_sta_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8787{
8788 proto_item *rcsi_item = proto_tree_add_item(tree, hf_ieee80211_ff_rcsi, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
8789 proto_tree *rcsi_tree = proto_item_add_subtree(rcsi_item, ett_rcsi_tree);
8790 proto_tree_add_item(rcsi_tree, hf_ieee80211_ff_rcsi_aid, tvb, offset, 1, ENC_NA0x00000000);
8791 offset += 1;
8792 add_tag_relay_capabilities(pinfo, rcsi_item, 2, rcsi_tree, tvb, &offset);
8793 return 3;
8794}
8795#endif
8796
8797static void
8798dissect_ieee80211_extension(guint16 fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
8799{
8800 proto_item *ti;
8801 proto_tree *ext_tree;
8802 proto_tree *fixed_tree;
8803 proto_tree *tagged_tree;
8804
8805 int offset = 0;
8806 int tagged_parameter_tree_len;
8807
8808 ti = proto_tree_add_item(tree, proto_wlan_ext, tvb, offset, -1, ENC_NA0x00000000);
8809 ext_tree = proto_item_add_subtree(ti, ett_80211_ext);
8810
8811 switch (COMPOSE_FRAME_TYPE(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf & 0x0C)<< 6) + (
(fcf) & 0xF0) + (((fcf) & 0xF00) >> 8)) : (((fcf
& 0x0C)<< 2)+(((fcf) & 0xF0) >> 4)))
)
8812 {
8813 case EXTENSION_DMG_BEACON0x30:
8814 {
8815 gboolean cc, dis;
8816 guint16 bic_field;
8817 fixed_tree = get_fixed_parameter_tree(ext_tree, tvb, offset, 20);
8818 offset += add_ff_timestamp(fixed_tree, tvb, pinfo, offset);
8819 offset += add_ff_sector_sweep(fixed_tree, tvb, pinfo, offset);
8820 offset += add_ff_beacon_interval(fixed_tree, tvb, pinfo, offset);
8821 bic_field = tvb_get_letohs(tvb, offset);
8822 cc = (bic_field & 0x1);
8823 dis = (bic_field & 0x2) >> 1;
8824 offset += add_ff_beacon_interval_ctrl(fixed_tree, tvb, pinfo, offset);
8825 offset += add_ff_dmg_params(fixed_tree, tvb, pinfo, offset);
8826 if(cc) {
8827 offset += add_ff_cc_field(fixed_tree, tvb, offset, dis);
8828 }
8829 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
8830
8831 /*
8832 * The tagged params are optional here. See Table 8.33a of the 2012
8833 * version of the standard.
8834 */
8835 if (tagged_parameter_tree_len) {
8836 tagged_tree = get_tagged_parameter_tree(ext_tree, tvb, offset, tagged_parameter_tree_len);
8837 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, EXTENSION_DMG_BEACON0x30);
8838 }
8839 break;
8840 }
8841 }
8842}
8843
8844static guint
8845add_ff_action_unprotected_dmg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8846{
8847 guint8 code;
8848 guint start = offset;
8849
8850 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8851 code = tvb_get_guint8(tvb, offset);
8852 offset += add_ff_unprotected_dmg_action_code(tree, tvb, pinfo, offset);
8853 switch (code) {
8854 case UNPROTECTED_DMG_ANNOUNCE0:
8855 offset += add_ff_timestamp(tree, tvb, pinfo, offset);
8856 offset += add_ff_beacon_interval(tree, tvb, pinfo, offset);
8857 break;
8858 case UNPROTECTED_DMG_BRP1:
8859 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8860 offset += add_ff_BRP_request(tree, tvb, pinfo, offset);
8861 break;
8862 }
8863 return offset - start;
8864}
8865
8866/* There is no easy way to skip all these subcarrier indices that must not
8867 * be displayed when showing compressed beamforming feedback matrices
8868 * Table 8-53g IEEE Std 802.11ac-2013 amendment.
8869 *
8870 * The irregular use of case statements in this function is to improve
8871 * readability in what is otherwise a large funtion that does very little.
8872 */
8873static inline int
8874vht_compressed_skip_scidx(guint8 nchan_width, guint8 ng, int scidx)
8875{
8876 switch(nchan_width) {
8877 /* 20 MHz */
8878 case 0:
8879 /* No Grouping */
8880 if (ng == 0)
8881 switch (scidx) {
8882 /* Pilot subcarriers */
8883 case -21: case -7: case 7: case 21:
8884 /* DC subcarrier */
8885 case 0:
8886 scidx++;
8887 default:
8888 break;
8889 }
8890 break;
8891 /* 40 MHz */
8892 case 1:
8893 /* No Grouping */
8894 if (ng == 0)
8895 switch (scidx) {
8896 /* Pilot subcarriers */
8897 case -53: case -25: case -11: case 11: case 25: case 53:
8898 scidx++;
8899 break;
8900 /* DC subcarriers */
8901 case -1: case 0: case 1:
8902 scidx = 2;
8903 default:
8904 break;
8905 }
8906 break;
8907 /* 80 MHz */
8908 case 2:
8909 /* No Grouping */
8910 if (ng == 0)
8911 switch (scidx) {
8912 /* Pilot subcarriers */
8913 case -103: case -75: case -39: case -11: case 11: case 39: case 75: case 103:
8914 scidx++;
8915 break;
8916 /* DC subcarriers, skip -1, 0, 1 */
8917 case -1:
8918 scidx = 2;
8919 default:
8920 break;
8921 }
8922 break;
8923 /* 160 MHz / 80+80 Mhz
8924 * Skip values here assume 160 MHz, as vht_mimo_control does not let us differentiate
8925 * between 160 MHz & 80-80MHz */
8926 case 3:
8927 switch (ng) {
8928 /* No Grouping */
8929 case 0:
8930 /* DC subcarriers, skip -5 to 5*/
8931 if (scidx == -5) {
8932 scidx = 6;
8933 break;
8934 }
8935 switch (scidx) {
8936 /* Pilot subcarriers */
8937 case -231: case -203: case -167: case -139: case -117: case -89: case -53: case -25:
8938 case 25: case 53: case 89: case 117: case 139: case 167: case 203: case 231:
8939 scidx++;
8940 break;
8941 /* Other subcarriers, skip -129 to -127, 127 to 129 */
8942 case -129:
8943 scidx = -126;
8944 break;
8945 case 127:
8946 scidx = 130;
8947 break;
8948 default:
8949 break;
8950 }
8951 break;
8952 /* Grouping of 2 */
8953 case 1:
8954 switch (scidx) {
8955 /* DC subcarriers */
8956 case -128: case -4: case -2: case 0: case 2: case 4: case 128:
8957 scidx++;
8958 default:
8959 break;
8960 }
8961 break;
8962 /* Grouping of 4 */
8963 case 2:
8964 if (scidx == -2 || scidx == 2)
8965 scidx++;
8966 break;
8967 }
8968 break;
8969 default:
8970 break;
8971 }
8972
8973 return scidx;
8974}
8975
8976static guint
8977add_ff_vht_compressed_beamforming_report(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
8978{
8979 guint32 vht_mimo;
8980 guint8 nc;
8981 guint8 nr;
8982 guint8 chan_width;
8983 guint8 grouping;
8984 gboolean codebook_info;
8985 gboolean feedback_type;
8986 proto_item *vht_beam_item;
8987 proto_tree *vht_beam_tree, *subtree;
8988 int i, matrix_size, len, pos, ns, scidx = 0;
8989 guint8 phi, psi, carry;
8990 /* Table 8-53d Order of angles in the Compressed Beamforming Feedback
8991 * Matrix subfield, IEEE Std 802.11ac-2013 amendment */
8992 static const guint8 na_arr[8][8] = { { 0, 0, 0, 0, 0, 0, 0, 0 },
8993 { 2, 2, 0, 0, 0, 0, 0, 0 },
8994 { 4, 6, 6, 0, 0, 0, 0, 0 },
8995 { 6, 10, 12, 12, 0, 0, 0, 0 },
8996 { 8, 14, 18, 20, 20, 0, 0, 0 },
8997 { 10, 18, 24, 28, 30, 30, 0, 0 },
8998 { 12, 22, 30, 36, 40, 42, 42, 0 },
8999 { 14, 26, 36, 44, 50, 54, 56, 56 }
9000 };
9001 /* Table 8-53g Subcarriers for which a Compressed Beamforming Feedback Matrix
9002 * subfield is sent back. IEEE Std 802.11ac-2013 amendment */
9003 static const int ns_arr[4][3] = { { 52, 30, 16 },
9004 { 108, 58, 30 },
9005 { 234, 122, 62 },
9006 { 468, 244, 124 }
9007 };
9008
9009 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_vht_mimo_cntrl,
9010 ett_ff_vhtmimo_cntrl, hf_ieee80211_ff_vht_mimo_cntrl_fields, ENC_LITTLE_ENDIAN0x80000000);
9011
9012 /* Extract values for beamforming use */
9013 vht_mimo = tvb_get_letoh24(tvb, offset);
9014 offset += 3;
9015 nc = (vht_mimo & 0x7) + 1;
9016 nr = ((vht_mimo & 0x38) >> 3) + 1;
9017 chan_width = (vht_mimo & 0xC0) >> 6;
9018 grouping = ((vht_mimo & 0x300) >> 8);
9019 codebook_info = (vht_mimo & 0x400) >> 10;
9020 feedback_type = (vht_mimo & 0x800) >> 11;
9021
9022 vht_beam_item = proto_tree_add_item(tree, hf_ieee80211_vht_compressed_beamforming_report, tvb,
9023 offset, -1, ENC_NA0x00000000);
9024 vht_beam_tree = proto_item_add_subtree(vht_beam_item, ett_ff_vhtmimo_beamforming_report);
9025
9026 subtree = proto_tree_add_subtree(vht_beam_tree, tvb, offset, nc,
9027 ett_ff_vhtmimo_beamforming_report_snr, NULL((void*)0), "Average Signal to Noise Ratio");
9028
9029 for (i = 1; i <= nc; i++)
9030 {
9031 guint8 snr;
9032
9033 snr = tvb_get_guint8(tvb, offset);
9034 proto_tree_add_uint_format(subtree, hf_ieee80211_vht_compressed_beamforming_report_snr, tvb, offset, 1,
9035 snr, "Stream %d - Signal to Noise Ratio: 0x%02X", i, snr);
9036 offset += 1;
9037 }
9038
9039 /* Table 8-53c Subfields of the VHT MIMO Control field (802.11ac-2013)
9040 * reserves value 3 of the Grouping subfield. */
9041 if (grouping == 3) {
9042 expert_add_info_format(pinfo, vht_beam_item, &ei_ieee80211_inv_val,
9043 "Grouping subfield value 3 is reserved");
9044 return offset;
9045 }
9046
9047 subtree = proto_tree_add_subtree(vht_beam_tree, tvb, offset, -1,
9048 ett_ff_vhtmimo_beamforming_report_feedback_matrices, NULL((void*)0), "Beamforming Feedback Matrics");
9049 if (feedback_type) {
9050 if (codebook_info) {
9051 psi = 7; phi = 9;
9052 } else {
9053 psi = 5; phi = 7;
9054 }
9055 } else {
9056 if (codebook_info) {
9057 psi = 4; phi = 6;
9058 } else {
9059 psi = 2; phi = 4;
9060 }
9061 }
9062
9063 ns = ns_arr[chan_width][grouping];
9064 switch(chan_width) {
9065 case 0:
9066 scidx = -28;
9067 break;
9068 case 1:
9069 scidx = -58;
9070 break;
9071 case 2:
9072 scidx = -122;
9073 break;
9074 case 3:
9075 /* This is -122 for 80+80MHz Channel Width but vht_mimo_control does not allow us
9076 * to differentiate between 160MHz and 80+80Mhz */
9077 scidx = -250;
9078 break;
9079 }
9080
9081 matrix_size = na_arr[nr - 1][nc -1] * (psi + phi)/2;
9082 pos = 0;
9083 for (i = 0; i < ns; i++) {
9084 if (pos % 8)
9085 carry = 1;
9086 else
9087 carry = 0;
9088 len = roundup2((pos + matrix_size), 8)((((pos + matrix_size))+((8)-1))&(~((8)-1)))/8 - roundup2(pos, 8)(((pos)+((8)-1))&(~((8)-1)))/8;
9089 scidx = vht_compressed_skip_scidx(chan_width, grouping, scidx);
9090
9091 /* TODO : For certain values from na_arr, there is always going be a carry over or overflow from the previous or
9092 into the next octet. The largest of possible unaligned values can be 41 bytes long, and masking and shifting
9093 whole buffers to show correct values with padding and overflow bits is hence skipped, we only mark the bytes
9094 of interest instead */
9095 proto_tree_add_none_format(subtree, hf_ieee80211_vht_compressed_beamforming_feedback_matrix, tvb,
9096 offset - carry, len + carry, "Compressed Beamforming Feedback Matrix for subcarrier %d", scidx++);
9097 offset += len;
9098 pos += matrix_size;
9099 }
9100
9101 return offset;
9102}
9103
9104static guint
9105add_ff_action_vht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
9106{
9107 guint start = offset;
9108 guint8 vht_action;
9109 proto_item *ti;
9110 proto_tree *ti_tree;
9111
9112 offset += add_ff_category_code(tree, tvb, pinfo, offset);
9113
9114 vht_action = tvb_get_guint8(tvb, offset);
9115 offset += add_ff_vht_action(tree, tvb, pinfo, offset);
9116
9117 switch(vht_action){
9118 case VHT_ACT_VHT_COMPRESSED_BEAMFORMING0:{
9119 offset = add_ff_vht_compressed_beamforming_report(tree, tvb, pinfo, offset);
9120 offset += tvb_reported_length_remaining(tvb, offset);
9121 }
9122 break;
9123 case VHT_ACT_GROUP_ID_MANAGEMENT1:{
9124 ti = proto_tree_add_item(tree, hf_ieee80211_vht_group_id_management, tvb,
9125 offset, -1, ENC_NA0x00000000);
9126 ti_tree = proto_item_add_subtree(ti, ett_vht_grpidmgmt);
9127
9128 proto_tree_add_item(ti_tree, hf_ieee80211_vht_membership_status_array, tvb,
9129 offset, 8, ENC_NA0x00000000);
9130 offset += 8;
9131 proto_tree_add_item(ti_tree, hf_ieee80211_vht_user_position_array, tvb,
9132 offset, 16, ENC_NA0x00000000);
9133 /*expert_add_info(pinfo, ti, &ei_ieee80211_vht_action); */
9134 offset += tvb_reported_length_remaining(tvb, offset);
9135 }
9136 break;
9137 case VHT_ACT_OPERATION_MODE_NOTIFICATION2:{
9138 ti = proto_tree_add_item(tree, hf_ieee80211_vht_operation_mode_notification, tvb,
9139 offset, -1, ENC_NA0x00000000);
9140 expert_add_info(pinfo, ti, &ei_ieee80211_vht_action);
9141 offset += tvb_reported_length_remaining(tvb, offset);
9142 }
9143 break;
9144 default:
9145 break;
9146 }
9147
9148
9149 return offset - start;
9150}
9151
9152static guint
9153add_ff_action_fst(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
9154{
9155 guint8 code;
9156 guint start = offset;
9157
9158 offset += add_ff_category_code(tree, tvb, pinfo, offset);
9159 code = tvb_get_guint8(tvb, offset);
9160 offset += add_ff_fst_action_code(tree, tvb, pinfo, offset);
9161 switch (code) {
9162 case FST_SETUP_REQUEST0:
9163 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9164 offset += add_ff_llt(tree, tvb, pinfo, offset);
9165 break;
9166 case FST_SETUP_RESPONSE1:
9167 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9168 offset += add_ff_status_code(tree, tvb, pinfo, offset);
9169 break;
9170 case FST_TEAR_DOWN2:
9171 offset += add_ff_fsts_id(tree, tvb, pinfo, offset);
9172 break;
9173 case FST_ACK_REQUEST3:
9174 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9175 offset += add_ff_fsts_id(tree, tvb, pinfo, offset);
9176 break;
9177 case FST_ACK_RESPONSE4:
9178 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9179 offset += add_ff_fsts_id(tree, tvb, pinfo, offset);
9180 break;
9181 case FST_ON_CHANNEL_TUNNEL_REQUEST5:
9182 offset += add_ff_oct_mmpdu(tree, tvb, pinfo, offset);
9183 break;
9184 }
9185 return offset - start;
9186}
9187
9188static guint
9189add_ff_action_dmg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
9190{
9191 guint8 code;
9192 guint start = offset;
9193 int left_offset;
9194
9195 offset += add_ff_category_code(tree, tvb, pinfo, offset);
9196 code = tvb_get_guint8(tvb, offset);
9197 offset += add_ff_dmg_action_code(tree, tvb, pinfo, offset);
9198 switch (code) {
9199 case DMG_ACTION_PWR_SAVE_CONFIG_REQ0:
9200 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9201 offset += add_ff_dmg_pwr_mgmt(tree, tvb, pinfo, offset);
9202 break;
9203 case DMG_ACTION_PWR_SAVE_CONFIG_RES1:
9204 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9205 offset += add_ff_status_code(tree, tvb, pinfo, offset);
9206 break;
9207 case DMG_ACTION_INFO_REQ2:
9208 offset += add_ff_subject_address(tree, tvb, pinfo, offset);
9209 break;
9210 case DMG_ACTION_INFO_RES3:
9211 offset += add_ff_subject_address(tree, tvb, pinfo, offset);
9212 break;
9213 case DMG_ACTION_HANDOVER_REQ4:
9214 offset += add_ff_handover_reason(tree, tvb, pinfo, offset);
9215 offset += add_ff_handover_remaining_bi(tree, tvb, pinfo, offset);
9216 break;
9217 case DMG_ACTION_HANDOVER_RES5:
9218 offset += add_ff_handover_result(tree, tvb, pinfo, offset);
9219 offset += add_ff_handover_reject_reason(tree, tvb, pinfo, offset);
9220 break;
9221 case DMG_ACTION_DTP_REQ6:
9222 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9223 break;
9224 case DMG_ACTION_DTP_RES7:
9225 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9226 break;
9227 case DMG_ACTION_RELAY_SEARCH_REQ8:
9228 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9229 offset += add_ff_destination_reds_aid(tree, tvb, pinfo, offset);
9230 break;
9231 case DMG_ACTION_RELAY_SEARCH_RES9:
9232 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9233 offset += add_ff_status_code(tree, tvb, pinfo, offset);
9234 break;
9235 case DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ10:
9236 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9237 break;
9238 case DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES11:
9239 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9240 left_offset =
9241 tvb_reported_length_remaining(tvb, offset);
9242 while(left_offset > 0) {
9243 proto_tree_add_item(tree, hf_ieee80211_ff_peer_sta_aid, tvb, offset, 1, ENC_NA0x00000000);
9244 proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset+1, 1, ENC_NA0x00000000);
9245 proto_tree_add_item(tree, hf_ieee80211_ff_internal_angle, tvb, offset+2, 1, ENC_NA0x00000000);
9246 proto_tree_add_item(tree, hf_ieee80211_ff_recommend, tvb, offset+2, 1, ENC_NA0x00000000);
9247 /* another reserved byte */
9248 offset += 4;
9249 left_offset -= 4;
9250 }
9251 break;
9252 case DMG_ACTION_RLS_REQ12:
9253 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9254 offset += add_ff_destination_aid(tree, tvb, pinfo, offset);
9255 offset += add_ff_realy_aid(tree, tvb, pinfo, offset);
9256 offset += add_ff_source_aid(tree, tvb, pinfo, offset);
9257 break;
9258 case DMG_ACTION_RLS_RES13:
9259 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9260 break;
9261 case DMG_ACTION_RLS_ANNOUNCE14:
9262 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9263 offset += add_ff_status_code(tree, tvb, pinfo, offset);
9264 offset += add_ff_destination_aid(tree, tvb, pinfo, offset);
9265 offset += add_ff_realy_aid(tree, tvb, pinfo, offset);
9266 offset += add_ff_source_aid(tree, tvb, pinfo, offset);
9267 break;
9268 case DMG_ACTION_RLS_TEARDOWN15:
9269 offset += add_ff_destination_aid(tree, tvb, pinfo, offset);
9270 offset += add_ff_realy_aid(tree, tvb, pinfo, offset);
9271 offset += add_ff_source_aid(tree, tvb, pinfo, offset);
9272 break;
9273 case DMG_ACTION_RELAY_ACK_REQ16:
9274 case DMG_ACTION_RELAY_ACK_RES17:
9275 break;
9276 case DMG_ACTION_TPA_REQ18:
9277 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9278 offset += add_ff_timing_offset(tree, tvb, pinfo, offset);
9279 offset += add_ff_sampling_frequency_offset(tree, tvb, pinfo, offset);
9280 break;
9281 case DMG_ACTION_TPA_RES19:
9282 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9283 break;
9284 case DMG_ACTION_TPA_REP20:
9285 offset += add_ff_status_code(tree, tvb, pinfo, offset);
9286 break;
9287 case DMG_ACTION_ROC_REQ21:
9288 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9289 offset += add_ff_relay_operation_type(tree, tvb, pinfo, offset);
9290 break;
9291 case DMG_ACTION_ROC_RES22:
9292 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9293 offset += add_ff_status_code(tree, tvb, pinfo, offset);
9294 break;
9295 }
9296 return offset - start;
9297}
9298
9299static guint
9300add_ff_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
9301{
9302 switch (tvb_get_guint8(tvb, offset) & 0x7f) {
9303 case CAT_SPECTRUM_MGMT0: /* 0 */
9304 return add_ff_action_spectrum_mgmt(tree, tvb, pinfo, offset);
9305 case CAT_QOS1: /* 1 */
9306 return add_ff_action_qos(tree, tvb, pinfo, offset);
9307 case CAT_DLS2: /* 2 */
9308 return add_ff_action_dls(tree, tvb, pinfo, offset);
9309 case CAT_BLOCK_ACK3: /* 3 */
9310 return add_ff_action_block_ack(tree, tvb, pinfo, offset);
9311 case CAT_PUBLIC4: /* 4 */
9312 return add_ff_action_public(tree, tvb, pinfo, offset);
9313 case CAT_RADIO_MEASUREMENT5: /* 5 */
9314 return add_ff_action_radio_measurement(tree, tvb, pinfo, offset);
9315 case CAT_FAST_BSS_TRANSITION6: /* 6 */
9316 return add_ff_action_fast_bss_transition(tree, tvb, pinfo, offset);
9317 case CAT_HT7: /* 7 */
9318 return add_ff_action_ht(tree, tvb, pinfo, offset);
9319 case CAT_SA_QUERY8: /* 8 */
9320 return add_ff_action_sa_query(tree, tvb, pinfo, offset);
9321 case CAT_PUBLIC_PROTECTED9: /* 9 */
9322 return add_ff_action_protected_public(tree, tvb, pinfo, offset);
9323 case CAT_WNM10: /* 10 */
9324 return add_ff_action_wnm(tree, tvb, pinfo, offset);
9325 case CAT_UNPROTECTED_WNM11: /* 11 */
9326 return add_ff_action_unprotected_wnm(tree, tvb, pinfo, offset);
9327 case CAT_TDLS12: /* 12 */
9328 return add_ff_action_tdls(tree, tvb, pinfo, offset);
9329 case CAT_MESH13: /* 13 */
9330 return add_ff_action_mesh(tree, tvb, pinfo, offset);
9331 case CAT_MULTIHOP14: /* 14 */
9332 return add_ff_action_multihop(tree, tvb, pinfo, offset);
9333 case CAT_SELF_PROTECTED15: /* 15 */
9334 return add_ff_action_self_protected(tree, tvb, pinfo, offset);
9335 case CAT_DMG16: /* 16 */
9336 return add_ff_action_dmg(tree, tvb, pinfo, offset);
9337 case CAT_MGMT_NOTIFICATION17: /* Management notification frame - 17 */
9338 return add_ff_action_mgmt_notification(tree, tvb, pinfo, offset);
9339 case CAT_FAST_SESSION_TRANSFER18: /* 18 */
9340 return add_ff_action_fst(tree, tvb, pinfo, offset);
9341/* case CAT_ROBUST_AV_STREAMING: 19 */
9342/* return add_ff_action_robust_av_streaming(tree, tvb, pinfo, offset); */
9343 case CAT_UNPROTECTED_DMG20: /* 20 */
9344 return add_ff_action_unprotected_dmg(tree, tvb, pinfo, offset);
9345 case CAT_VHT21: /* 21 */
9346 return add_ff_action_vht(tree, tvb, pinfo, offset);
9347/* case CAT_VENDOR_SPECIFIC_PROTECTED: Vendor Specific Protected Category - 126 */
9348/* return add_ff_action_vendor_specific_protected(tree, tvb, pinfo, offset);*/
9349 case CAT_VENDOR_SPECIFIC127: /* Vendor Specific Protected Category - 127 */
9350 return add_ff_action_vendor_specific(tree, tvb, pinfo, offset);
9351 default:
9352 add_ff_category_code(tree, tvb, pinfo, offset);
9353 return 1;
9354 }
9355}
9356
9357static const value_string ieee80211_rsn_cipher_vals[] = {
9358 {0, "NONE"},
9359 {1, "WEP (40-bit)"},
9360 {2, "TKIP"},
9361 {3, "AES (OCB)"},
9362 {4, "AES (CCM)"},
9363 {5, "WEP (104-bit)"},
9364 {6, "BIP"},
9365 {7, "Group addressed traffic not allowed"},
9366 {8, "GCMP"},
9367 {0, NULL((void*)0)}
9368};
9369
9370static const value_string ieee80211_rsn_keymgmt_vals[] = {
9371 {0, "NONE"},
9372 {1, "WPA"},
9373 {2, "PSK"},
9374 {3, "FT over IEEE 802.1X"},
9375 {4, "FT using PSK"},
9376 {5, "WPA (SHA256)"},
9377 {6, "PSK (SHA256)"},
9378 {7, "TDLS / TPK Handshake"},
9379 {0, NULL((void*)0)}
9380};
9381
9382static void
9383oui_base_custom(gchar *result, guint32 oui)
9384{
9385 guint8 p_oui[3];
9386 const gchar *manuf_name;
9387
9388 p_oui[0] = oui >> 16 & 0xFF;
9389 p_oui[1] = oui >> 8 & 0xFF;
9390 p_oui[2] = oui & 0xFF;
9391
9392 /* Attempt an OUI lookup. */
9393 manuf_name = get_manuf_name_if_known(p_oui);
9394 if (manuf_name == NULL((void*)0)) {
9395 /* Could not find an OUI. */
9396 g_snprintf(result, ITEM_LABEL_LENGTH240, "%.2x-%.2x-%.2x", p_oui[0], p_oui[1], p_oui[2]);
9397 }
9398 else {
9399 /* Found an address string. */
9400 g_snprintf(result, ITEM_LABEL_LENGTH240, "%.2x-%.2x-%.2x (%s)", p_oui[0], p_oui[1], p_oui[2], manuf_name);
9401 }
9402}
9403
9404static void
9405rsn_gcs_base_custom(gchar *result, guint32 gcs)
9406{
9407 gchar oui_result[SHORT_STR256];
9408 gchar *tmp_str;
9409
9410 oui_result[0] = '\0';
9411 oui_base_custom(oui_result, gcs >> 8);
9412 tmp_str = val_to_str_wmem(NULL((void*)0), gcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d");
9413 g_snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
9414 wmem_free(NULL((void*)0), tmp_str);
9415}
9416
9417static void
9418rsn_pcs_base_custom(gchar *result, guint32 pcs)
9419{
9420 gchar oui_result[SHORT_STR256];
9421 gchar *tmp_str;
9422
9423 oui_result[0] = '\0';
9424 oui_base_custom(oui_result, pcs >> 8);
9425 tmp_str = val_to_str_wmem(NULL((void*)0), pcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d");
9426 g_snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
9427 wmem_free(NULL((void*)0), tmp_str);
9428
9429}
9430static void
9431rsn_akms_base_custom(gchar *result, guint32 akms)
9432{
9433 gchar oui_result[SHORT_STR256];
9434 gchar *tmp_str;
9435
9436 oui_result[0] = '\0';
9437 oui_base_custom(oui_result, akms >> 8);
9438 tmp_str = val_to_str_wmem(NULL((void*)0), akms & 0xFF, ieee80211_rsn_keymgmt_vals, "Unknown %d");
9439 g_snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
9440 wmem_free(NULL((void*)0), tmp_str);
9441}
9442
9443static gchar *
9444rsn_pcs_return(guint32 pcs)
9445{
9446 gchar *result;
9447
9448 result = (gchar *)wmem_alloc(wmem_packet_scope(), SHORT_STR256);
9449 result[0] = '\0';
9450 rsn_pcs_base_custom(result, pcs);
9451
9452 return result;
9453}
9454
9455static gchar *
9456rsn_akms_return(guint32 akms)
9457{
9458 gchar *result;
9459
9460 result = (gchar *)wmem_alloc(wmem_packet_scope(), SHORT_STR256);
9461 result[0] = '\0';
9462 rsn_akms_base_custom(result, akms);
9463
9464 return result;
9465}
9466
9467static void
9468rsn_gmcs_base_custom(gchar *result, guint32 gmcs)
9469{
9470 gchar oui_result[SHORT_STR256];
9471 gchar *tmp_str;
9472
9473 oui_result[0] = '\0';
9474 oui_base_custom(oui_result, gmcs >> 8);
9475 tmp_str = val_to_str_wmem(NULL((void*)0), gmcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d");
9476 g_snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
9477 wmem_free(NULL((void*)0), tmp_str);
9478}
9479
9480static void
9481rsni_base_custom(gchar *result, guint32 rsni)
9482{
9483 double temp_double;
9484
9485 temp_double = (double)rsni;
9486 g_snprintf(result, ITEM_LABEL_LENGTH240, "%f dB", (temp_double / 2));
9487}
9488
9489static void
9490vht_tpe_custom(gchar *result, guint8 txpwr)
9491{
9492 gint8 txpwr_db;
9493
9494 txpwr_db = (gint8)(txpwr);
9495 g_snprintf(result, ITEM_LABEL_LENGTH240, "%3.1f dBm", (txpwr_db/2.0));
9496}
9497
9498static void
9499channel_number_custom(gchar *result, guint8 channel_number)
9500{
9501 switch(channel_number){
9502 case 0:
9503 g_snprintf(result, ITEM_LABEL_LENGTH240, "%u (iterative measurements on all supported channels in the specified Operating Class)", channel_number);
9504 break;
9505 case 255:
9506 g_snprintf(result, ITEM_LABEL_LENGTH240, "%u (iterative measurements on all supported channels listed in the AP Channel Report)", channel_number);
9507 break;
9508 default :
9509 g_snprintf(result, ITEM_LABEL_LENGTH240, "%u (iterative measurements on that Channel Number)", channel_number);
9510 break;
9511 }
9512}
9513
9514/* WPA / WME */
9515static const value_string ieee802111_wfa_ie_type_vals[] = {
9516 { 1, "WPA Information Element" },
9517 { 2, "WMM/WME" },
9518 { 4, "WPS" },
9519 { 0, NULL((void*)0) }
9520};
9521
9522static const value_string ieee80211_wfa_ie_wpa_cipher_vals[] = {
9523 { 0, "NONE" },
9524 { 1, "WEP (40-bit)" },
9525 { 2, "TKIP" },
9526 { 3, "AES (OCB)" },
9527 { 4, "AES (CCM)" },
9528 { 5, "WEP (104-bit)" },
9529 { 6, "BIP" },
9530 { 7, "Group addressed traffic not allowed" },
9531 { 0, NULL((void*)0) }
9532};
9533
9534static const value_string ieee80211_wfa_ie_wpa_keymgmt_vals[] = {
9535 { 0, "NONE" },
9536 { 1, "WPA" },
9537 { 2, "PSK" },
9538 { 3, "FT over IEEE 802.1X" },
9539 { 4, "FT using PSK" },
9540 { 5, "WPA (SHA256)" },
9541 { 6, "PSK (SHA256)" },
9542 { 7, "TDLS / TPK Handshake" },
9543 { 0, NULL((void*)0) }
9544};
9545
9546static const value_string ieee80211_wfa_ie_wme_acs_vals[] = {
9547 { 0, "Best Effort" },
9548 { 1, "Background" },
9549 { 2, "Video" },
9550 { 3, "Voice" },
9551 { 0, NULL((void*)0) }
9552};
9553
9554static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_direction_vals[] = {
9555 { 0, "Uplink" },
9556 { 1, "Downlink" },
9557 { 2, "Direct link" },
9558 { 3, "Bidirectional link" },
9559 { 0, NULL((void*)0) }
9560};
9561
9562static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_psb_vals[] = {
9563 { 0, "Legacy" },
9564 { 1, "U-APSD" },
9565 { 0, NULL((void*)0) }
9566};
9567
9568static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_up_vals[] = {
9569 { 0, "Best Effort" },
9570 { 1, "Background" },
9571 { 2, "Spare" },
9572 { 3, "Excellent Effort" },
9573 { 4, "Controlled Load" },
9574 { 5, "Video" },
9575 { 6, "Voice" },
9576 { 7, "Network Control" },
9577 { 0, NULL((void*)0) }
9578};
9579
9580static const value_string ieee802111_wfa_ie_wme_qos_info_sta_max_sp_length_vals[] = {
9581 { 0, "WMM AP may deliver all buffered frames (MSDUs and MMPDUs)" },
9582 { 1, "WMM AP may deliver a maximum of 2 buffered frames (MSDUs and MMPDUs) per USP" },
9583 { 2, "WMM AP may deliver a maximum of 4 buffered frames (MSDUs and MMPDUs) per USP" },
9584 { 3, "WMM AP may deliver a maximum of 6 buffered frames (MSDUs and MMPDUs) per USP" },
9585 { 0, NULL((void*)0)}
9586};
9587static const true_false_string ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs = {
9588 "WMM delivery and trigger enabled",
9589 "non-WMM PS"
9590};
9591
9592static void
9593wpa_mcs_base_custom(gchar *result, guint32 mcs)
9594{
9595 gchar oui_result[SHORT_STR256];
9596 gchar *tmp_str;
9597
9598 oui_result[0] = '\0';
9599 oui_base_custom(oui_result, mcs >> 8);
9600 tmp_str = val_to_str_wmem(NULL((void*)0), mcs & 0xFF, ieee80211_wfa_ie_wpa_cipher_vals, "Unknown %d");
9601 g_snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
9602 wmem_free(NULL((void*)0), tmp_str);
9603}
9604
9605static void
9606wpa_ucs_base_custom(gchar *result, guint32 ucs)
9607{
9608 gchar oui_result[SHORT_STR256];
9609 gchar *tmp_str;
9610
9611 oui_result[0] = '\0';
9612 oui_base_custom(oui_result, ucs >> 8);
9613 tmp_str = val_to_str_wmem(NULL((void*)0), ucs & 0xFF, ieee80211_wfa_ie_wpa_cipher_vals, "Unknown %d");
9614 g_snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
9615 wmem_free(NULL((void*)0), tmp_str);
9616}
9617static void
9618wpa_akms_base_custom(gchar *result, guint32 akms)
9619{
9620 gchar oui_result[SHORT_STR256];
9621 gchar *tmp_str;
9622
9623 oui_result[0] = '\0';
9624 oui_base_custom(oui_result, akms >> 8);
9625 tmp_str = val_to_str_wmem(NULL((void*)0), akms & 0xFF, ieee80211_wfa_ie_wpa_keymgmt_vals, "Unknown %d");
9626 g_snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
9627 wmem_free(NULL((void*)0), tmp_str);
9628}
9629
9630static gchar *
9631wpa_ucs_return(guint32 ucs)
9632{
9633 gchar *result;
9634
9635 result = (gchar *)wmem_alloc(wmem_packet_scope(), SHORT_STR256);
9636 result[0] = '\0';
9637 wpa_ucs_base_custom(result, ucs);
9638
9639 return result;
9640}
9641
9642static gchar *
9643wpa_akms_return(guint32 akms)
9644{
9645 gchar *result;
9646
9647 result = (gchar *)wmem_alloc(wmem_packet_scope(), SHORT_STR256);
9648 result[0] = '\0';
9649 wpa_akms_base_custom(result, akms);
9650
9651 return result;
9652}
9653
9654/* For each Field */
9655static const value_string ieee80211_wapi_suite_type[] = {
9656 {0, "Reserved"},
9657 {1, "WAI Certificate Authentication and Key Management"},
9658 {2, "WAI Preshared Key Authentication and Key Management"},
9659 {0, NULL((void*)0)},
9660};
9661/* For Summary Tag Information */
9662static const value_string ieee80211_wapi_suite_type_short[] = {
9663 {0, "Reserved"},
9664 {1, "WAI-CERT"},
9665 {2, "WAI-PSK"},
9666 {0, NULL((void*)0)},
9667};
9668
9669static const value_string ieee80211_wapi_cipher_type[] = {
9670 {0, "Reserved"},
9671 {1, "WPI-SMS4"},
9672 {0, NULL((void*)0)},
9673};
9674
9675static const value_string ieee802111_wfa_ie_wme_type[] = {
9676 { 0, "Information Element" },
9677 { 1, "Parameter Element" },
9678 { 2, "TSPEC Element" },
9679 { 0, NULL((void*)0)}
9680};
9681
9682static const value_string ft_subelem_id_vals[] = {
9683 {0, "Reserved"},
9684 {1, "PMK-R1 key holder identifier (R1KH-ID)"},
9685 {2, "GTK subelement"},
9686 {3, "PMK-R0 key holder identifier (R0KH-ID)"},
9687 {4, "IGTK"},
9688 {0, NULL((void*)0)}
9689};
9690
9691static int
9692dissect_wme_qos_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int ftype)
9693{
9694 proto_tree *wme_qos_info_tree;
9695 proto_item *wme_qos_info_item;
9696
9697 wme_qos_info_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_qos_info, tvb, offset, 1, ENC_NA0x00000000);
9698 wme_qos_info_tree = proto_item_add_subtree(wme_qos_info_item, ett_wme_qos_info);
9699
9700 switch (ftype) {
9701 case MGT_ASSOC_REQ0x00:
9702 case MGT_PROBE_REQ0x04:
9703 case MGT_REASSOC_REQ0x02:
9704 {
9705 /* To AP so decode as per WMM standard Figure 7 QoS Info field when sent from WMM STA*/
9706 proto_tree_add_item(wme_qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length, tvb, offset, 1, ENC_NA0x00000000);
9707 proto_tree_add_item(wme_qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be, tvb, offset, 1, ENC_NA0x00000000);
9708 proto_tree_add_item(wme_qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk, tvb, offset, 1, ENC_NA0x00000000);
9709 proto_tree_add_item(wme_qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi, tvb, offset, 1, ENC_NA0x00000000);
9710 proto_tree_add_item(wme_qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo, tvb, offset, 1, ENC_NA0x00000000);
9711 proto_tree_add_item(wme_qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved, tvb, offset, 1, ENC_NA0x00000000);
9712 break;
9713 }
9714 case MGT_BEACON0x08:
9715 case MGT_PROBE_RESP0x05:
9716 case MGT_ASSOC_RESP0x01:
9717 case MGT_REASSOC_RESP0x03:
9718 {
9719 /* From AP so decode as per WMM standard Figure 6 QoS Info field when sent from WMM AP */
9720 proto_tree_add_item(wme_qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd, tvb, offset, 1, ENC_NA0x00000000);
9721 proto_tree_add_item(wme_qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count, tvb, offset, 1, ENC_NA0x00000000);
9722 proto_tree_add_item(wme_qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved, tvb, offset, 1, ENC_NA0x00000000);
9723 break;
9724 }
9725 default:
9726 expert_add_info_format(pinfo, wme_qos_info_item, &ei_ieee80211_wfa_ie_wme_qos_info_bad_ftype, "Could not deduce direction to decode correctly, ftype %u", ftype);
9727 break;
9728 }
9729
9730 offset += 1;
9731 return offset;
9732}
9733
9734static int
9735dissect_vendor_ie_wpawme(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, guint32 tag_len, int ftype)
9736{
9737 guint8 type;
9738
9739 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_type, tvb, offset, 1, ENC_NA0x00000000);
9740 type = tvb_get_guint8(tvb, offset);
9741 proto_item_append_text(tree, ": %s", val_to_str(type, ieee802111_wfa_ie_type_vals, "Unknown %d"));
9742 offset += 1;
9743
9744 switch (type) {
9745 case 1: /* Wi-Fi Protected Access (WPA) */
9746 {
9747 proto_item *wpa_mcs_item, *wpa_ucs_item, *wpa_akms_item;
9748 proto_item *wpa_sub_ucs_item, *wpa_sub_akms_item;
9749 proto_tree *wpa_mcs_tree, *wpa_ucs_tree, *wpa_akms_tree;
9750 proto_tree *wpa_sub_ucs_tree, *wpa_sub_akms_tree;
9751 guint16 ucs_count, akms_count;
9752 guint ii;
9753
9754 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_version, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
9755 offset += 2;
9756
9757 /* Multicast Cipher Suite */
9758 wpa_mcs_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_mcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
9759 wpa_mcs_tree = proto_item_add_subtree(wpa_mcs_item, ett_wpa_mcs_tree);
9760 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
9761
9762 /* Check if OUI is 00:50:F2 (WFA) */
9763 if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME0x0050F2)
9764 {
9765 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_wfa_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
9766 } else {
9767 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
9768 }
9769 offset += 4;
9770
9771 /* Unicast Cipher Suites */
9772 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_ucs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
9773 ucs_count = tvb_get_letohs(tvb, offset);
9774 offset += 2;
9775
9776 wpa_ucs_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_ucs_list, tvb, offset, ucs_count * 4, ENC_NA0x00000000);
9777 wpa_ucs_tree = proto_item_add_subtree(wpa_ucs_item, ett_wpa_ucs_tree);
9778 for (ii = 0; ii < ucs_count; ii++)
9779 {
9780 wpa_sub_ucs_item = proto_tree_add_item(wpa_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
9781 wpa_sub_ucs_tree = proto_item_add_subtree(wpa_sub_ucs_item, ett_wpa_sub_ucs_tree);
9782 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
9783
9784 /* Check if OUI is 00:50:F2 (WFA) */
9785 if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME0x0050F2)
9786 {
9787 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_wfa_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
9788 proto_item_append_text(wpa_ucs_item, " %s", wpa_ucs_return(tvb_get_ntohl(tvb, offset)));
9789 } else {
9790 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
9791 }
9792 offset += 4;
9793 }
9794
9795 /* Authenticated Key Management Suites */
9796 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_akms_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
9797 akms_count = tvb_get_letohs(tvb, offset);
9798 offset += 2;
9799
9800 wpa_akms_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_akms_list, tvb, offset, akms_count * 4, ENC_NA0x00000000);
9801 wpa_akms_tree = proto_item_add_subtree(wpa_akms_item, ett_wpa_akms_tree);
9802 for (ii = 0; ii < akms_count; ii++)
9803 {
9804 wpa_sub_akms_item = proto_tree_add_item(wpa_akms_tree, hf_ieee80211_wfa_ie_wpa_akms, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
9805 wpa_sub_akms_tree = proto_item_add_subtree(wpa_sub_akms_item, ett_wpa_sub_akms_tree);
9806 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
9807
9808 /* Check if OUI is 00:50:F2 (WFA) */
9809 if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME0x0050F2)
9810 {
9811 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_wfa_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
9812 proto_item_append_text(wpa_akms_item, " %s", wpa_akms_return(tvb_get_ntohl(tvb, offset)));
9813 } else {
9814 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
9815 }
9816 offset += 4;
9817 }
9818 break;
9819 }
9820 case 2: /* Wireless Multimedia Enhancements (WME) */
9821 {
9822 guint8 subtype;
9823
9824 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_subtype, tvb, offset, 1, ENC_NA0x00000000);
9825 subtype = tvb_get_guint8(tvb, offset);
9826 proto_item_append_text(tree, ": %s", val_to_str(subtype, ieee802111_wfa_ie_wme_type, "Unknown %d"));
9827 offset += 1;
9828 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_version, tvb, offset, 1, ENC_NA0x00000000);
9829 offset += 1;
9830 switch (subtype) {
9831 case 0: /* WME Information Element */
9832 {
9833 /* WME QoS Info Field */
9834 offset = dissect_wme_qos_info(tree, tvb, pinfo, offset, ftype);
9835 break;
9836 }
9837 case 1: /* WME Parameter Element */
9838 {
9839 int i;
9840 /* WME QoS Info Field */
9841 offset = dissect_wme_qos_info(tree, tvb, pinfo, offset, ftype);
9842 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_reserved, tvb, offset, 1, ENC_NA0x00000000);
9843 offset += 1;
9844 /* AC Parameters */
9845 for (i = 0; i < 4; i++)
9846 {
9847 proto_item *ac_item, *aci_aifsn_item, *ecw_item;
9848 proto_tree *ac_tree, *aci_aifsn_tree, *ecw_tree;
9849 guint8 aci_aifsn, ecw, ecwmin, ecwmax;
9850 guint16 cwmin, cwmax;
9851
9852 ac_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_ac_parameters, tvb, offset, 4, ENC_NA0x00000000);
9853 ac_tree = proto_item_add_subtree(ac_item, ett_wme_ac);
9854
9855 /* ACI/AIFSN Field */
9856 aci_aifsn_item = proto_tree_add_item(ac_tree, hf_ieee80211_wfa_ie_wme_acp_aci_aifsn, tvb, offset, 1, ENC_NA0x00000000);
9857 aci_aifsn_tree = proto_item_add_subtree(aci_aifsn_item, ett_wme_aci_aifsn);
9858 proto_tree_add_item(aci_aifsn_tree, hf_ieee80211_wfa_ie_wme_acp_aci, tvb, offset, 1, ENC_NA0x00000000);
9859 proto_tree_add_item(aci_aifsn_tree, hf_ieee80211_wfa_ie_wme_acp_acm, tvb, offset, 1, ENC_NA0x00000000);
9860 proto_tree_add_item(aci_aifsn_tree, hf_ieee80211_wfa_ie_wme_acp_aifsn, tvb, offset, 1, ENC_NA0x00000000);
9861 proto_tree_add_item(aci_aifsn_tree, hf_ieee80211_wfa_ie_wme_acp_reserved, tvb, offset, 1, ENC_NA0x00000000);
9862 aci_aifsn = tvb_get_guint8(tvb, offset);
9863 /* 802.11-2012, 8.4.2.31 EDCA Parameter Set element */
9864 if (aci_aifsn < 2) {
9865 expert_add_info_format(pinfo, aci_aifsn_tree, &ei_ieee80211_qos_bad_aifsn,
9866 "The minimum value for the AIFSN subfield is 2 (found %u).", aci_aifsn);
9867 }
9868 proto_item_append_text(ac_item, " ACI %u (%s), ACM %s, AIFSN %u",
9869 (aci_aifsn & 0x60) >> 5, try_val_to_str((aci_aifsn & 0x60) >> 5, ieee80211_wfa_ie_wme_acs_vals),
9870 (aci_aifsn & 0x10) ? "yes" : "no", aci_aifsn & 0x0f);
9871 offset += 1;
9872
9873 /* ECWmin/ECWmax field */
9874 ecw_item = proto_tree_add_item(ac_tree, hf_ieee80211_wfa_ie_wme_acp_ecw, tvb, offset, 1, ENC_NA0x00000000);
9875 ecw_tree = proto_item_add_subtree(ecw_item, ett_wme_ecw);
9876 ecw = tvb_get_guint8(tvb, offset);
9877 ecwmin = ecw & 0x0f;
9878 ecwmax = (ecw & 0xf0) >> 4;
9879 cwmin= (1 << ecwmin) - 1;
9880 cwmax= (1 << ecwmax) - 1;
9881 proto_tree_add_item(ecw_tree, hf_ieee80211_wfa_ie_wme_acp_ecw_max, tvb, offset, 1, ENC_NA0x00000000);
9882 proto_tree_add_item(ecw_tree, hf_ieee80211_wfa_ie_wme_acp_ecw_min, tvb, offset, 1, ENC_NA0x00000000);
9883 proto_tree_add_uint_format_value(ecw_tree, hf_ieee80211_wfa_ie_wme_acp_cw_max, tvb, offset, 1, cwmax, "%u", cwmax);
9884 proto_tree_add_uint_format_value(ecw_tree, hf_ieee80211_wfa_ie_wme_acp_cw_min, tvb, offset, 1, cwmin, "%u", cwmin);
9885 proto_item_append_text(ac_item, ", ECWmin/max %u/%u (CWmin/max %u/%u)", ecwmin, ecwmax, cwmin, cwmax);
9886 offset += 1;
9887
9888 /* TXOP Limit */
9889 proto_tree_add_item(ac_tree, hf_ieee80211_wfa_ie_wme_acp_txop_limit, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
9890 proto_item_append_text(ac_item, ", TXOP %u", tvb_get_letohs(tvb, offset));
9891 offset += 2;
9892 }
9893 break;
9894 }
9895 case 2: /* WME TSPEC Element */
9896 {
9897
9898 proto_item *tsinfo_item;
9899 proto_tree *tsinfo_tree;
9900
9901 tsinfo_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
9902 tsinfo_tree = proto_item_add_subtree(tsinfo_item, ett_tsinfo_tree);
9903
9904 proto_tree_add_item(tsinfo_tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
9905 proto_tree_add_item(tsinfo_tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
9906 proto_tree_add_item(tsinfo_tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
9907 proto_tree_add_item(tsinfo_tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
9908 proto_tree_add_item(tsinfo_tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
9909 offset += 3;
9910
9911 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_nor_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
9912 offset += 2;
9913
9914 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_max_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
9915 offset += 2;
9916
9917 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9918 offset += 4;
9919
9920 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_max_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9921 offset += 4;
9922
9923 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_inact_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9924 offset += 4;
9925
9926 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_susp_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9927 offset += 4;
9928
9929 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9930 offset += 4;
9931
9932 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9933 offset += 4;
9934
9935 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_mean_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9936 offset += 4;
9937
9938 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_peak_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9939 offset += 4;
9940
9941 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_burst_size, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9942 offset += 4;
9943
9944 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_delay_bound, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9945 offset += 4;
9946
9947 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_phy, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9948 offset += 4;
9949
9950 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_surplus, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
9951 offset += 2;
9952
9953 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_medium, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
9954 offset += 2;
9955
9956 break;
9957 }
9958 default:
9959 /* No default Action */
9960 break;
9961 } /* End switch (subtype) */
9962 break;
9963 }
9964 case 4: /* WPS: Wifi Protected Setup */
9965 {
9966 dissect_wps_tlvs(tree, tvb, offset, tag_len-1, NULL((void*)0));
9967 }
9968 break;
9969 default:
9970 /* No default Action...*/
9971 break;
9972 } /* End switch (type) */
9973
9974 return offset;
9975}
9976
9977static const value_string hs20_indication_release_number_vals[] = {
9978 { 0, "Release 1" },
9979 { 1, "Release 2" },
9980 { 0, NULL((void*)0) }
9981};
9982
9983static void
9984dissect_hs20_indication(proto_tree *tree, tvbuff_t *tvb, int offset)
9985{
9986 proto_tree_add_item(tree, hf_hs20_indication_dgaf_disabled, tvb, offset, 1,
9987 ENC_LITTLE_ENDIAN0x80000000);
9988 proto_tree_add_item(tree, hf_hs20_indication_pps_mo_id_present, tvb, offset, 1,
9989 ENC_LITTLE_ENDIAN0x80000000);
9990 proto_tree_add_item(tree, hf_hs20_indication_anqp_domain_id_present, tvb, offset, 1,
9991 ENC_LITTLE_ENDIAN0x80000000);
9992 proto_tree_add_item(tree, hf_hs20_indication_release_number, tvb, offset, 1,
9993 ENC_LITTLE_ENDIAN0x80000000);
9994}
9995
9996static void
9997dissect_vendor_ie_wfa(packet_info *pinfo, proto_item *item, tvbuff_t *tag_tvb)
9998{
9999 gint tag_len = tvb_reported_length(tag_tvb);
10000
10001 if (tag_len < 4)
10002 return;
10003
10004 switch (tvb_get_guint8(tag_tvb, 3)) {
10005 case WFA_SUBTYPE_P2P9:
10006 dissect_wifi_p2p_ie(pinfo, item, tag_tvb, 4, tag_len - 4);
10007 proto_item_append_text(item, ": P2P");
10008 break;
10009 case WFA_SUBTYPE_WIFI_DISPLAY10:
10010 dissect_wifi_display_ie(pinfo, item, tag_tvb, 4, tag_len - 4);
10011 proto_item_append_text(item, ": Wi-Fi Display");
10012 break;
10013 case WFA_SUBTYPE_HS20_INDICATION16:
10014 dissect_hs20_indication(item, tag_tvb, 4);
10015 proto_item_append_text(item, ": Hotspot 2.0 Indication");
10016 break;
10017 }
10018}
10019
10020static void
10021dissect_vendor_ie_rsn(proto_item * item, proto_tree * tree, tvbuff_t * tvb, int offset, guint32 tag_len)
10022{
10023
10024 switch(tvb_get_guint8(tvb, offset)){
10025 case 4:
10026 {
10027 /* IEEE 802.11i / Key Data Encapsulation / Data Type=4 - PMKID.
10028 * This is only used within EAPOL-Key frame Key Data. */
10029 offset += 1;
10030 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_pmkid, tvb, offset, 16, ENC_NA0x00000000);
10031 }
10032 break;
10033 default:
10034 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_unknown, tvb, offset, tag_len, ENC_NA0x00000000);
10035 break;
10036 }
10037
10038 proto_item_append_text(item, ": RSN");
10039
10040}
10041
10042typedef enum {
10043 MARVELL_IE_MESH = 4
10044} marvell_ie_type_t;
10045
10046static void
10047dissect_vendor_ie_marvell(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
10048 tvbuff_t *tvb, int offset, guint32 tag_len)
10049{
10050 guint8 type;
10051
10052 type = tvb_get_guint8(tvb, offset);
10053 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10054 offset += 1;
10055
10056 switch (type) {
10057 case MARVELL_IE_MESH:
10058 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_subtype, tvb,
10059 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
10060 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_version, tvb,
10061 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
10062 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_active_proto_id, tvb,
10063 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
10064 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_active_metric_id, tvb,
10065 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
10066 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_cap, tvb,
10067 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
10068 break;
10069
10070 default:
10071 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_data, tvb, offset,
10072 tag_len - 1, ENC_NA0x00000000);
10073 break;
10074 }
10075}
10076
10077typedef enum {
10078 ATHEROS_IE_ADVCAP = 1,
10079 ATHEROS_IE_XR = 3
10080} atheros_ie_type_t;
10081
10082typedef enum {
10083 ATHEROS_IE_ADVCAP_S = 1
10084} atheros_ie_advcap_subtype_t;
10085
10086typedef enum {
10087 ATHEROS_IE_XR_S = 1
10088} atheros_ie_xr_subtype_t;
10089
10090typedef enum {
10091 ATHEROS_IE_CAP_TURBOP = 0x01,
10092 ATHEROS_IE_CAP_COMP = 0x02,
10093 ATHEROS_IE_CAP_FF = 0x04,
10094 ATHEROS_IE_CAP_XR = 0x08,
10095 ATHEROS_IE_CAP_AR = 0x10,
10096 ATHEROS_IE_CAP_BURST = 0x20,
10097 ATHEROS_IE_CAP_WME = 0x40,
10098 ATHEROS_IE_CAP_BOOST = 0x80
10099} atheros_ie_cap_t;
10100
10101static const value_string atheros_ie_type_vals[] = {
10102 { ATHEROS_IE_ADVCAP, "Advanced Capability"},
10103 { ATHEROS_IE_XR, "eXtended Range"},
10104 { 0, NULL((void*)0) }
10105};
10106
10107static void
10108dissect_vendor_ie_atheros_cap(proto_item *item _U___attribute__((unused)), tvbuff_t *tvb, int offset)
10109{
10110 proto_tree *cap_tree;
10111
10112 cap_tree = proto_item_add_subtree(item, ett_ath_cap_tree);
10113
10114 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_turbop, tvb, offset, 1, ENC_NA0x00000000);
10115 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_comp, tvb, offset, 1, ENC_NA0x00000000);
10116 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_ff, tvb, offset, 1, ENC_NA0x00000000);
10117 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_xr, tvb, offset, 1, ENC_NA0x00000000);
10118 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_ar, tvb, offset, 1, ENC_NA0x00000000);
10119 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_burst, tvb, offset, 1, ENC_NA0x00000000);
10120 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_wme, tvb, offset, 1, ENC_NA0x00000000);
10121 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_boost, tvb, offset, 1, ENC_NA0x00000000);
10122
10123}
10124
10125static void
10126dissect_vendor_ie_atheros(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
10127 tvbuff_t *tvb, int offset, guint tag_len,
10128 packet_info *pinfo, proto_item *ti_len)
10129{
10130 guint8 type;
10131 guint8 subtype;
10132 guint8 version;
10133 proto_item *cap_item;
10134
10135 if (tag_len <= 3) {
10136 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 6", tag_len+3); /* Add length of OUI to tag_length */
10137 return;
10138 }
10139 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_type, tvb, offset, 1, ENC_NA0x00000000);
10140 type = tvb_get_guint8(tvb, offset);
10141 proto_item_append_text(item, ": %s", val_to_str_const(type, atheros_ie_type_vals, "Unknown"));
10142 offset += 1;
10143 tag_len -= 1;
10144
10145 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_subtype, tvb, offset, 1, ENC_NA0x00000000);
10146 subtype = tvb_get_guint8(tvb, offset);
10147 offset += 1;
10148 tag_len -= 1;
10149
10150 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_version, tvb, offset, 1, ENC_NA0x00000000);
10151 version = tvb_get_guint8(tvb, offset);
10152 offset += 1;
10153 tag_len -= 1;
10154
10155 if (version == 0)
10156 {
10157 switch (type) {
10158 case ATHEROS_IE_ADVCAP:
10159 {
10160 switch (subtype) {
10161 case ATHEROS_IE_ADVCAP_S:
10162 {
10163 cap_item = proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_advcap_cap, tvb, offset, 1, ENC_NA0x00000000);
10164 dissect_vendor_ie_atheros_cap(cap_item, tvb, offset);
10165 offset += 1;
10166 tag_len -= 1;
10167
10168 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_advcap_defkey, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10169 offset += 2;
10170 tag_len -= 2;
10171 break;
10172 }
10173 default:
10174 /* No default Action */
10175 break;
10176 } /* End switch (subtype) */
10177 break;
10178 }
10179 case ATHEROS_IE_XR:
10180 {
10181 switch (subtype) {
10182 case ATHEROS_IE_XR_S:
10183 {
10184 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_info, tvb, offset, 1, ENC_NA0x00000000);
10185 offset += 1;
10186 tag_len -= 1;
10187
10188 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_base_bssid, tvb, offset, 6, ENC_NA0x00000000);
10189 offset += 6;
10190 tag_len -= 6;
10191
10192 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_bssid, tvb, offset, 6, ENC_NA0x00000000);
10193 offset += 6;
10194 tag_len -= 6;
10195
10196 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_beacon, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10197 offset += 2;
10198 tag_len -= 2;
10199
10200 cap_item = proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_base_cap, tvb, offset, 1, ENC_NA0x00000000);
10201 dissect_vendor_ie_atheros_cap(cap_item, tvb, offset);
10202 offset += 1;
10203 tag_len -= 1;
10204
10205 cap_item = proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_cap, tvb, offset, 1, ENC_NA0x00000000);
10206 dissect_vendor_ie_atheros_cap(cap_item, tvb, offset);
10207 offset += 1;
10208 tag_len -= 1;
10209 break;
10210 }
10211 default:
10212 /* No default Action */
10213 break;
10214 } /* End switch (subtype) */
10215 break;
10216 default:
10217 /* No default Action */
10218 break;
10219 } /* End switch (type) */
10220
10221 }
10222 }
10223 if (tag_len > 0) {
10224 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_data, tvb, offset, tag_len, ENC_NA0x00000000);
10225 }
10226}
10227
10228typedef enum {
10229 AIRONET_IE_DTPC = 0,
10230 AIRONET_IE_UNKNOWN1 = 1,
10231 AIRONET_IE_VERSION = 3,
10232 AIRONET_IE_QOS,
10233 AIRONET_IE_UNKNOWN11 = 11,
10234 AIRONET_IE_QBSS_V2 = 14,
10235 AIRONET_IE_CLIENT_MFP = 20
10236} aironet_ie_type_t;
10237
10238static const value_string aironet_ie_type_vals[] = {
10239 { AIRONET_IE_DTPC, "DTPC"},
10240 { AIRONET_IE_UNKNOWN1, "Unknown (1)"},
10241 { AIRONET_IE_VERSION, "CCX version"},
10242 { AIRONET_IE_QOS, "Qos"},
10243 { AIRONET_IE_UNKNOWN11, "Unknown (11)"},
10244 { AIRONET_IE_QBSS_V2, "QBSS V2 - CCA"},
10245 { AIRONET_IE_CLIENT_MFP, "Client MFP"},
10246 { 0, NULL((void*)0) }
10247};
10248
10249static const value_string aironet_mfp_vals[] = {
10250 { 0, "Disabled"},
10251 { 1, "Enabled"},
10252 { 0, NULL((void*)0) }
10253};
10254
10255static void
10256dissect_vendor_ie_aironet(proto_item *aironet_item, proto_tree *ietree,
10257 tvbuff_t *tvb, int offset, guint32 tag_len)
10258{
10259 guint8 type;
10260 int i;
10261 gboolean dont_change = FALSE(0); /* Don't change the IE item text to default */
10262
10263 type = tvb_get_guint8(tvb, offset);
10264 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10265 offset += 1;
10266
10267 switch (type) {
10268 case AIRONET_IE_DTPC:
10269 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_dtpc, tvb, offset, 2, ENC_NA0x00000000);
10270 proto_item_append_text(aironet_item, ": Aironet DTPC Powerlevel 0x%02X", tvb_get_guint8(tvb, offset));
10271 dont_change = TRUE(!(0));
10272 break;
10273 case AIRONET_IE_VERSION:
10274 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_version, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10275 proto_item_append_text(aironet_item, ": Aironet CCX version = %d", tvb_get_guint8(tvb, offset));
10276 dont_change = TRUE(!(0));
10277 break;
10278 case AIRONET_IE_QOS:
10279 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_qos_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10280 offset += 1;
10281 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_qos_paramset, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10282 offset += 1;
10283
10284 /* XXX: just copied over from WME. Maybe "Best Effort" and "Background"
10285 * need to be swapped. Also, the "TXOP" may be TXOP - or not.
10286 */
10287 for (i = 0; i < 4; i++) {
10288 guint8 byte1, byte2;
10289 guint16 txop;
10290 byte1 = tvb_get_guint8(tvb, offset);
10291 byte2 = tvb_get_guint8(tvb, offset + 1);
10292 txop = tvb_get_letohs(tvb, offset + 2);
10293 proto_tree_add_bytes_format(ietree, hf_ieee80211_aironet_ie_qos_val, tvb, offset, 4, NULL((void*)0),
10294 "CCX QoS Parameters: ACI %u (%s), Admission Control %sMandatory, AIFSN %u, ECWmin %u, ECWmax %u, TXOP %u",
10295 (byte1 & 0x60) >> 5, val_to_str((byte1 & 0x60) >> 5, wme_acs, "(Unknown: %d)"),
10296 (byte1 & 0x10) ? "" : "not ", byte1 & 0x0f,
10297 byte2 & 0x0f, (byte2 & 0xf0) >> 4,
10298 txop);
10299 offset += 4;
10300 }
10301 break;
10302 case AIRONET_IE_QBSS_V2:
10303 /* Extract Values */
10304 proto_tree_add_item(ietree, hf_ieee80211_qbss2_scount, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10305 proto_tree_add_item(ietree, hf_ieee80211_qbss2_cu, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
10306 proto_tree_add_item(ietree, hf_ieee80211_qbss2_cal, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
10307 proto_tree_add_item(ietree, hf_ieee80211_qbss2_gl, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN0x80000000);
10308 break;
10309 case AIRONET_IE_CLIENT_MFP:
10310 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_clientmfp, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10311 proto_item_append_text(aironet_item, ": Aironet Client MFP %s",
10312 val_to_str_const(1 & tvb_get_guint8(tvb, offset), aironet_mfp_vals, "Unknown"));
10313 dont_change = TRUE(!(0));
10314 break;
10315 default:
10316 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_data, tvb, offset,
10317 tag_len - 1, ENC_NA0x00000000);
10318 break;
10319 }
10320 if (!dont_change) {
10321 proto_item_append_text(aironet_item, ": Aironet %s (%d)",
10322 val_to_str_const(type, aironet_ie_type_vals, "Unknown"), type);
10323 }
10324}
10325
10326#define ARUBA_APNAME3 3
10327static const value_string ieee80211_vs_aruba_subtype_vals[] = {
10328 { ARUBA_APNAME3, "AP Name"},
10329 { 0, NULL((void*)0) }
10330};
10331static void
10332dissect_vendor_ie_aruba(proto_item *item, proto_tree *ietree,
10333 tvbuff_t *tvb, int offset, guint32 tag_len)
10334{
10335 guint8 type;
10336 const guint8* name;
10337
10338 offset += 1; /* VS OUI Type */
10339 tag_len -= 1;
10340
10341 type = tvb_get_guint8(tvb, offset);
10342 proto_tree_add_item(ietree, hf_ieee80211_vs_aruba_subtype, tvb, offset, 1, ENC_NA0x00000000);
10343 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_aruba_subtype_vals, "Unknown"));
10344 offset += 1;
10345 tag_len -= 1;
10346
10347 switch (type) {
10348 case ARUBA_APNAME3:
10349 offset += 1;
10350 tag_len -= 1;
10351
10352 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_aruba_apname, tvb,
10353 offset, tag_len, ENC_ASCII0x00000000|ENC_NA0x00000000, wmem_packet_scope(), &name);
10354 proto_item_append_text(item, " (%s)", name);
10355 break;
10356
10357 default:
10358 proto_tree_add_item(ietree, hf_ieee80211_vs_aruba_data, tvb, offset,
10359 tag_len, ENC_NA0x00000000);
10360 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(wmem_packet_scope(), tvb, offset, tag_len));
10361 break;
10362 }
10363}
10364
10365static void
10366dissect_vendor_ie_mikrotik(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
10367 tvbuff_t *tvb, int offset, guint32 tag_len)
10368{
10369 guint8 type, length;
10370 proto_item *subitem;
10371 proto_tree *subtree;
10372
10373 offset += 1; /* VS OUI Type */
10374 tag_len -= 1;
10375 /* FIXME: Make sure we have at least 2 bytes left */
10376 proto_tree_add_item(ietree, hf_ieee80211_vs_mikrotik_unknown, tvb, offset, 2, ENC_NA0x00000000);
10377
10378 offset += 2;
10379 tag_len -= 2;
10380
10381 while (tag_len >= 2) {
10382 type = tvb_get_guint8(tvb, offset);
10383 length = tvb_get_guint8(tvb, offset+1);
10384 subitem = proto_tree_add_item(ietree, hf_ieee80211_vs_mikrotik_subitem, tvb, offset, length+2, ENC_NA0x00000000);
10385 subtree = proto_item_add_subtree(subitem, ett_mikrotik);
10386 proto_item_set_text(subitem, "Sub IE (T/L: %d/%d)", type, length);
10387
10388 proto_tree_add_item(subtree, hf_ieee80211_vs_mikrotik_subtype, tvb, offset, 1, ENC_NA0x00000000);
10389 offset += 1;
10390 tag_len -= 1;
10391
10392 proto_tree_add_item(subtree, hf_ieee80211_vs_mikrotik_sublength, tvb, offset, 1, ENC_NA0x00000000);
10393 offset += 1;
10394 tag_len -= 1;
10395
10396 if (tag_len < length)
10397 /* FIXME: warn about this */
10398 length = tag_len;
10399 if (length == 0) {
10400 break;
10401 }
10402
10403 proto_tree_add_item(subtree, hf_ieee80211_vs_mikrotik_subdata, tvb, offset, length, ENC_NA0x00000000);
10404 offset += length;
10405 tag_len -= length;
10406 }
10407}
10408
10409enum vs_nintendo_type {
10410 NINTENDO_SERVICES = 0x11,
10411 NINTENDO_CONSOLEID = 0xF0
10412};
10413
10414static const value_string ieee80211_vs_nintendo_type_vals[] = {
10415 { NINTENDO_SERVICES, "Services"},
10416 { NINTENDO_CONSOLEID, "ConsoleID"},
10417 { 0, NULL((void*)0) }
10418};
10419
10420static proto_tree*
10421dissect_vendor_ie_nintendo_tlv(const int hfindex, proto_tree *ietree,
10422 tvbuff_t *tvb, int offset, guint32 sublen)
10423{
10424 proto_item *nintendo_item;
10425 proto_tree *nintendo_tree;
10426
10427 nintendo_item = proto_tree_add_item(ietree, hfindex, tvb, offset, sublen, ENC_NA0x00000000);
10428 nintendo_tree = proto_item_add_subtree(nintendo_item, ett_nintendo);
10429
10430 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_type, tvb, offset, 1, ENC_NA0x00000000);
10431 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_length, tvb, offset + 1, 1, ENC_NA0x00000000);
10432
10433 return nintendo_tree;
10434}
10435
10436static void
10437dissect_vendor_ie_nintendo(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
10438 tvbuff_t *tvb, int offset, guint32 tag_len)
10439{
10440 proto_tree *nintendo_tree;
10441
10442 guint8 subtype;
10443 guint8 sublength;
10444 guint32 length = tag_len;
10445
10446 /* Skip OUI type for now - the code is for type 1 (StreetPass) only */
10447 /* http://3dbrew.org/wiki/StreetPass */
10448 offset += 1;
10449 length -= 1;
10450
10451 while(length > 0 && length < 256) { /* otherwise we are < 0 but on unsigned */
10452 subtype = tvb_get_guint8(tvb, offset);
10453 sublength = tvb_get_guint8(tvb, offset + 1);
10454
10455 switch(subtype) {
10456 case NINTENDO_SERVICES:
10457 nintendo_tree = dissect_vendor_ie_nintendo_tlv(hf_ieee80211_vs_nintendo_servicelist, ietree, tvb, offset, sublength + 2);
10458 offset += 2;
10459 length -= 2;
10460
10461 while (sublength > 4) {
10462
10463 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_service, tvb, offset, 5, ENC_NA0x00000000);
10464 offset += 5;
10465 length -= 5;
10466 sublength -= 5;
10467 }
10468 break;
10469 case NINTENDO_CONSOLEID:
10470 nintendo_tree = dissect_vendor_ie_nintendo_tlv(hf_ieee80211_vs_nintendo_consoleid, ietree, tvb, offset, sublength + 2);
10471 offset += + 2;
10472 length -= + 2;
10473
10474 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_consoleid, tvb, offset, sublength, ENC_NA0x00000000);
10475 offset += sublength;
10476 length -= sublength;
10477 break;
10478 default:
10479 nintendo_tree = dissect_vendor_ie_nintendo_tlv(hf_ieee80211_vs_nintendo_unknown, ietree, tvb, offset, sublength + 2);
10480 offset += + 2;
10481 length -= + 2;
10482
10483 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_unknown, tvb, offset, sublength, ENC_NA0x00000000);
10484 offset += sublength;
10485 length -= sublength;
10486 break;
10487 }
10488 }
10489}
10490
10491/* 802.11-2012 8.4.2.37 QoS Capability element */
10492static int
10493dissect_qos_capability(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int ftype)
10494{
10495 switch (ftype) {
10496 case MGT_ASSOC_REQ0x00:
10497 case MGT_PROBE_REQ0x04:
10498 case MGT_REASSOC_REQ0x02:
10499 {
10500 /* To AP so decode Qos Info as STA */
10501 offset += add_ff_qos_info_sta(tree, tvb, pinfo, offset);
10502 break;
10503 }
10504
10505 case MGT_BEACON0x08:
10506 case MGT_PROBE_RESP0x05:
10507 case MGT_ASSOC_RESP0x01:
10508 case MGT_REASSOC_RESP0x03:
10509 {
10510 /* From AP so decode QoS Info as AP */
10511 offset += add_ff_qos_info_ap(tree, tvb, pinfo, offset);
10512 break;
10513 }
10514
10515 default:
10516 expert_add_info_format(pinfo, proto_tree_get_parent(tree), &ei_ieee80211_qos_info_bad_ftype,
10517 "Could not deduce direction to decode correctly, ftype %u", ftype);
10518 break;
10519 }
10520
10521 return offset;
10522}
10523
10524/* 7.3.2.25 RSN information element */
10525static int
10526dissect_rsn_ie(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
10527 int offset, guint32 tag_len)
10528{
10529 proto_item *rsn_gcs_item, *rsn_pcs_item, *rsn_akms_item, *rsn_cap_item, *rsn_pmkid_item, *rsn_gmcs_item;
10530 proto_item *rsn_sub_pcs_item, *rsn_sub_akms_item;
10531 proto_item *rsn_pcs_count, *rsn_akms_count, *rsn_pmkid_count;
10532 proto_tree *rsn_gcs_tree, *rsn_pcs_tree, *rsn_akms_tree, *rsn_cap_tree, *rsn_pmkid_tree, *rsn_gmcs_tree;
10533 proto_tree *rsn_sub_pcs_tree, *rsn_sub_akms_tree;
10534 guint16 pcs_count, akms_count, pmkid_count;
10535 guint ii;
10536 int tag_end = offset + tag_len;
10537
10538 proto_tree_add_item(tree, hf_ieee80211_rsn_version, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10539 offset += 2;
10540
10541 /* 7.3.2.25.1 Group Cipher suites */
10542 rsn_gcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_gcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
10543 rsn_gcs_tree = proto_item_add_subtree(rsn_gcs_item, ett_rsn_gcs_tree);
10544 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
10545
10546 /* Check if OUI is 00:0F:AC (ieee80211) */
10547 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
10548 {
10549 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_80211_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
10550 } else {
10551 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
10552 }
10553 offset += 4;
10554
10555 /* 7.3.2.25.2 Pairwise Cipher suites */
10556 rsn_pcs_count = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10557 pcs_count = tvb_get_letohs(tvb, offset);
10558 offset += 2;
10559
10560 if (offset + (pcs_count * 4) > tag_end)
10561 {
10562 expert_add_info_format(pinfo, rsn_pcs_count, &ei_ieee80211_rsn_pcs_count,
10563 "Pairwise Cipher Suite Count too large, 4*%u > %d", pcs_count, tag_end - offset);
10564 pcs_count = (tag_end - offset) / 4;
10565 }
10566
10567 rsn_pcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_list, tvb, offset, pcs_count * 4, ENC_NA0x00000000);
10568 rsn_pcs_tree = proto_item_add_subtree(rsn_pcs_item, ett_rsn_pcs_tree);
10569 for (ii = 0; ii < pcs_count; ii++)
10570 {
10571 rsn_sub_pcs_item = proto_tree_add_item(rsn_pcs_tree, hf_ieee80211_rsn_pcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
10572 rsn_sub_pcs_tree = proto_item_add_subtree(rsn_sub_pcs_item, ett_rsn_sub_pcs_tree);
10573 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
10574
10575 /* Check if OUI is 00:0F:AC (ieee80211) */
10576 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
10577 {
10578 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
10579 proto_item_append_text(rsn_pcs_item, " %s", rsn_pcs_return(tvb_get_ntohl(tvb, offset)));
10580 } else {
10581 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
10582 }
10583 offset += 4;
10584 }
10585
10586 if (offset >= tag_end)
10587 {
10588 return offset;
10589 }
10590
10591 /* 7.3.2.25.2 AKM suites */
10592 rsn_akms_count = proto_tree_add_item(tree, hf_ieee80211_rsn_akms_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10593 akms_count = tvb_get_letohs(tvb, offset);
10594 offset += 2;
10595
10596 if (offset + (akms_count * 4) > tag_end)
10597 {
10598 expert_add_info_format(pinfo, rsn_akms_count, &ei_ieee80211_rsn_pmkid_count,
10599 "Auth Key Management (AKM) Suite Count too large, 4*%u > %d", akms_count, tag_end - offset);
10600 akms_count = (tag_end - offset) / 4;
10601 }
10602
10603 rsn_akms_item = proto_tree_add_item(tree, hf_ieee80211_rsn_akms_list, tvb, offset, akms_count * 4, ENC_NA0x00000000);
10604 rsn_akms_tree = proto_item_add_subtree(rsn_akms_item, ett_rsn_akms_tree);
10605 for (ii = 0; ii < akms_count; ii++)
10606 {
10607 rsn_sub_akms_item = proto_tree_add_item(rsn_akms_tree, hf_ieee80211_rsn_akms, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
10608 rsn_sub_akms_tree = proto_item_add_subtree(rsn_sub_akms_item, ett_rsn_sub_akms_tree);
10609 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
10610
10611 /* Check if OUI is 00:0F:AC (ieee80211) */
10612 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
10613 {
10614 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
10615 proto_item_append_text(rsn_akms_item, " %s", rsn_akms_return(tvb_get_ntohl(tvb, offset)));
10616 } else {
10617 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
10618 }
10619 offset += 4;
10620 }
10621
10622 /* 7.3.2.25.3 RSN capabilities */
10623 rsn_cap_item = proto_tree_add_item(tree, hf_ieee80211_rsn_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10624 rsn_cap_tree = proto_item_add_subtree(rsn_cap_item, ett_rsn_cap_tree);
10625
10626 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_preauth, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10627 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_no_pairwise, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10628 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_ptksa_replay_counter, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10629 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_gtksa_replay_counter, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10630 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_mfpr, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10631 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_mfpc, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10632 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_jmr, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10633 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_peerkey, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10634 offset += 2;
10635 if (offset >= tag_end)
10636 {
10637 return offset;
10638 }
10639 /* 7.3.2.25.4 PMKID */
10640 rsn_pmkid_count = proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10641 pmkid_count = tvb_get_letohs(tvb, offset);
10642 offset += 2;
10643
10644 if (offset + (pmkid_count * 16) > tag_end)
10645 {
10646 expert_add_info_format(pinfo, rsn_pmkid_count, &ei_ieee80211_pmkid_count_too_large,
10647 "PMKID Count too large, 16*%u > %d", pmkid_count, tag_end - offset);
10648 pmkid_count = (tag_end - offset) / 16;
10649 }
10650
10651 rsn_pmkid_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid_list, tvb, offset, pmkid_count * 16, ENC_NA0x00000000);
10652 rsn_pmkid_tree = proto_item_add_subtree(rsn_pmkid_item, ett_rsn_pmkid_tree);
10653 for (ii = 0; ii < pmkid_count; ii++)
10654 {
10655 proto_tree_add_item(rsn_pmkid_tree, hf_ieee80211_rsn_pmkid, tvb, offset, 16, ENC_NA0x00000000);
10656 offset += 16;
10657 }
10658
10659 if (offset >= tag_end)
10660 {
10661 return offset;
10662 }
10663 /* Group Management Cipher Suite (802.11w)*/
10664 rsn_gmcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_gmcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
10665 rsn_gmcs_tree = proto_item_add_subtree(rsn_gmcs_item, ett_rsn_gmcs_tree);
10666 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
10667 /* Check if OUI is 00:0F:AC (ieee80211) */
10668 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
10669 {
10670 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_80211_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
10671 } else {
10672 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
10673 }
10674 offset += 4;
10675
10676 return offset;
10677}
10678static int
10679dissect_extended_capabilities_ie(packet_info *pinfo, proto_tree *tree,
10680 proto_item *ti, proto_item *ti_len,
10681 guint32 tag_len, tvbuff_t *tvb,
10682 int offset, int tag_end)
10683{
10684 proto_item *ti_ex_cap;
10685 proto_tree *ex_cap_tree;
10686
10687 if (tag_len < 1)
10688 {
10689 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length %u too short, must be greater than 0", tag_len);
10690 return offset;
10691 }
10692 proto_item_append_text(ti, " (%u octet%s)", tag_len, plurality(tag_len, "", "s")((tag_len) == 1 ? ("") : ("s")));
10693
10694 /* Extended Capability octet 1 */
10695 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA0x00000000);
10696 proto_item_append_text(ti_ex_cap, " (octet 1)");
10697 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap1);
10698 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b0, tvb, offset, 1, ENC_NA0x00000000);
10699 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b1, tvb, offset, 1, ENC_NA0x00000000);
10700 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b2, tvb, offset, 1, ENC_NA0x00000000);
10701 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b3, tvb, offset, 1, ENC_NA0x00000000);
10702 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b4, tvb, offset, 1, ENC_NA0x00000000);
10703 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b5, tvb, offset, 1, ENC_NA0x00000000);
10704 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b6, tvb, offset, 1, ENC_NA0x00000000);
10705 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b7, tvb, offset, 1, ENC_NA0x00000000);
10706 offset += 1;
10707
10708 /* Extended Capability octet 2 */
10709 if (offset >= tag_end) {
10710 return offset;
10711 }
10712 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA0x00000000);
10713 proto_item_append_text(ti_ex_cap, " (octet 2)");
10714 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap2);
10715 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b8, tvb, offset, 1, ENC_NA0x00000000);
10716 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b9, tvb, offset, 1, ENC_NA0x00000000);
10717 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b10, tvb, offset, 1, ENC_NA0x00000000);
10718 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b11, tvb, offset, 1, ENC_NA0x00000000);
10719 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b12, tvb, offset, 1, ENC_NA0x00000000);
10720 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b13, tvb, offset, 1, ENC_NA0x00000000);
10721 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b14, tvb, offset, 1, ENC_NA0x00000000);
10722 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b15, tvb, offset, 1, ENC_NA0x00000000);
10723 offset += 1;
10724
10725 /* Extended Capability octet 3 */
10726 if (offset >= tag_end) {
10727 return offset;
10728 }
10729 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA0x00000000);
10730 proto_item_append_text(ti_ex_cap, " (octet 3)");
10731 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap3);
10732 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b16, tvb, offset, 1, ENC_NA0x00000000);
10733 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b17, tvb, offset, 1, ENC_NA0x00000000);
10734 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b18, tvb, offset, 1, ENC_NA0x00000000);
10735 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b19, tvb, offset, 1, ENC_NA0x00000000);
10736 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b20, tvb, offset, 1, ENC_NA0x00000000);
10737 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b21, tvb, offset, 1, ENC_NA0x00000000);
10738 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b22, tvb, offset, 1, ENC_NA0x00000000);
10739 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b23, tvb, offset, 1, ENC_NA0x00000000);
10740 offset += 1;
10741
10742 /* Extended Capability octet 4 */
10743 if (offset >= tag_end) {
10744 return offset;
10745 }
10746 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA0x00000000);
10747 proto_item_append_text(ti_ex_cap, " (octet 4)");
10748 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap4);
10749 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b24, tvb, offset, 1, ENC_NA0x00000000);
10750 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b25, tvb, offset, 1, ENC_NA0x00000000);
10751 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b26, tvb, offset, 1, ENC_NA0x00000000);
10752 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b27, tvb, offset, 1, ENC_NA0x00000000);
10753 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b28, tvb, offset, 1, ENC_NA0x00000000);
10754 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b29, tvb, offset, 1, ENC_NA0x00000000);
10755 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b30, tvb, offset, 1, ENC_NA0x00000000);
10756 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b31, tvb, offset, 1, ENC_NA0x00000000);
10757 offset += 1;
10758
10759 /* Extended Capability octet 5 */
10760 if (offset >= tag_end) {
10761 return offset;
10762 }
10763 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA0x00000000);
10764 proto_item_append_text(ti_ex_cap, " (octet 5)");
10765 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap5);
10766 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b32, tvb, offset, 1, ENC_NA0x00000000);
10767 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b33, tvb, offset, 1, ENC_NA0x00000000);
10768 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b34, tvb, offset, 1, ENC_NA0x00000000);
10769 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b35, tvb, offset, 1, ENC_NA0x00000000);
10770 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b36, tvb, offset, 1, ENC_NA0x00000000);
10771 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b37, tvb, offset, 1, ENC_NA0x00000000);
10772 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b38, tvb, offset, 1, ENC_NA0x00000000);
10773 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b39, tvb, offset, 1, ENC_NA0x00000000);
10774 offset += 1;
10775
10776 /* Extended Capability octet 6 */
10777 if (offset >= tag_end) {
10778 return offset;
10779 }
10780 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA0x00000000);
10781 proto_item_append_text(ti_ex_cap, " (octet 6)");
10782 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap6);
10783 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b40, tvb, offset, 1, ENC_NA0x00000000);
10784 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_serv_int_granularity, tvb, offset, 1, ENC_NA0x00000000);
10785 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b44, tvb, offset, 1, ENC_NA0x00000000);
10786 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b45, tvb, offset, 1, ENC_NA0x00000000);
10787 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b46, tvb, offset, 1, ENC_NA0x00000000);
10788 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b47, tvb, offset, 1, ENC_NA0x00000000);
10789 offset += 1;
10790
10791
10792 /* Extended Capability octet 7 */
10793 if (offset >= tag_end) {
10794 return offset;
10795 }
10796 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA0x00000000);
10797 proto_item_append_text(ti_ex_cap, " (octet 7)");
10798 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap7);
10799 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b48, tvb, offset, 1, ENC_NA0x00000000);
10800 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_o7, tvb, offset, 1, ENC_NA0x00000000);
10801 offset += 1;
10802
10803 /* Extended Capability octet 8 */
10804 if (offset >= tag_end) {
10805 return offset;
10806 }
10807 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA0x00000000);
10808 proto_item_append_text(ti_ex_cap, " (octet 8)");
10809 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap8);
10810 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b61, tvb, offset, 1, ENC_NA0x00000000);
10811 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b62, tvb, offset, 1, ENC_NA0x00000000);
10812
10813 /* Std802.11ac-2013, b63-64 indicate the Max Number of MSDUs in AMSDU. */
10814 ti_ex_cap = proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b63, tvb, offset, 1, ENC_NA0x00000000);
10815 if (offset+1 < tag_end) {
10816
10817 proto_item_append_text(ti_ex_cap, " (b63-64 Max Number of MSDUs in AMSDU: %s)",
10818 val_to_str((tvb_get_guint8(tvb, offset) & 0x80) + ((tvb_get_guint8(tvb, offset+1) & 0x1) << 1),
10819 vht_max_mpdu_in_amsdu, "Unknown:%d"));
10820 }
10821
10822 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_o8, tvb, offset, 1, ENC_NA0x00000000);
10823 offset += 1;
10824
10825 /* Extended Capability octet 9 */
10826 if (offset >= tag_end) {
10827 return offset;
10828 }
10829 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA0x00000000);
10830 proto_item_append_text(ti_ex_cap, " (octet 9)");
10831 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap9);
10832 ti_ex_cap = proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b64, tvb, offset, 1, ENC_NA0x00000000);
10833 proto_item_append_text(ti_ex_cap, " (b63-64 Max Number of MSDUs in AMSDU)");
10834 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_o9, tvb, offset, 1, ENC_NA0x00000000);
10835 offset += 1;
10836
10837 return offset;
10838}
10839static int
10840dissect_vht_mcs_set(proto_tree *tree, tvbuff_t *tvb, int offset)
10841{
10842 proto_item *ti;
10843 proto_tree *mcs_tree, *rx_mcs_tree, *tx_mcs_tree;
10844
10845 /* 8 byte Supported MCS set */
10846 ti = proto_tree_add_item(tree, hf_ieee80211_vht_mcsset, tvb, offset, 8, ENC_NA0x00000000);
10847
10848 mcs_tree = proto_item_add_subtree(ti, ett_vht_mcsset_tree);
10849
10850 ti = proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_rx_mcs_map, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10851 rx_mcs_tree = proto_item_add_subtree(ti, ett_vht_rx_mcsbit_tree);
10852
10853 /* B0 - B15 */
10854 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10855 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10856 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10857 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10858 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10859 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10860 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10861 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10862
10863 offset += 2;
10864 /* B16 - B28 13 bits*/
10865 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_rx_highest_long_gi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10866
10867 /* B29 - B31 2 reserved bits*/
10868
10869 offset += 2;
10870 /* B32 - B47 */
10871
10872 ti = proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_tx_mcs_map, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10873 tx_mcs_tree = proto_item_add_subtree(ti, ett_vht_tx_mcsbit_tree);
10874 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10875 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10876 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10877 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10878 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10879 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10880 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10881 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10882
10883 offset += 2;
10884 /* B48 - B60 13 bits */
10885 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_tx_highest_long_gi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10886 /* B61 - B63 2 reserved bits*/
10887
10888 offset += 2;
10889 return offset;
10890}
10891
10892static int
10893dissect_vht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
10894 guint32 tag_len, proto_item *ti_len)
10895{
10896 proto_item *cap_item;
10897 proto_tree *cap_tree;
10898
10899 if (tag_len != 12) {
10900 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
10901 "VHT Capabilities IE length %u wrong, must be = 12", tag_len);
10902 return offset;
10903 }
10904
10905 /* 4 byte VHT Capabilities Info*/
10906 cap_item = proto_tree_add_item(tree, hf_ieee80211_vht_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10907
10908 cap_tree = proto_item_add_subtree(cap_item, ett_vht_cap_tree);
10909
10910 /* B0 - B1 2 bits */
10911 proto_tree_add_item(cap_tree, hf_ieee80211_vht_max_mpdu_length, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10912 /* B2 - B3 2 bits*/
10913 proto_tree_add_item(cap_tree, hf_ieee80211_vht_supported_chan_width_set, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10914
10915 /* B4 - B7 4x 1 bit fields */
10916 proto_tree_add_item(cap_tree, hf_ieee80211_vht_rx_ldpc, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10917 proto_tree_add_item(cap_tree, hf_ieee80211_vht_short_gi_for_80, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10918 proto_tree_add_item(cap_tree, hf_ieee80211_vht_short_gi_for_160, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10919 proto_tree_add_item(cap_tree, hf_ieee80211_vht_tx_stbc, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10920
10921 /* End of first byte */
10922
10923 /* B8 - B10 3 bit field */
10924 proto_tree_add_item(cap_tree, hf_ieee80211_vht_rx_stbc, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10925
10926 /* B11 - B12 2x 1 bit fields */
10927 proto_tree_add_item(cap_tree, hf_ieee80211_vht_su_beamformer_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10928 proto_tree_add_item(cap_tree, hf_ieee80211_vht_su_beamformee_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10929
10930 /* B13 - B15 3 bit field */
10931 proto_tree_add_item(cap_tree, hf_ieee80211_vht_beamformer_antennas, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10932
10933 /* End of second byte */
10934
10935 /* B16 - B18 */
10936 proto_tree_add_item(cap_tree, hf_ieee80211_vht_sounding_dimensions, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10937 /* B19 */
10938 proto_tree_add_item(cap_tree, hf_ieee80211_vht_mu_beamformer_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10939
10940 /* B20 - B22 2x 1 bit fields */
10941 proto_tree_add_item(cap_tree, hf_ieee80211_vht_mu_beamformee_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10942 proto_tree_add_item(cap_tree, hf_ieee80211_vht_txop_ps, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10943 proto_tree_add_item(cap_tree, hf_ieee80211_vht_var_htc_field, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10944
10945 /* B23 - B25 3 bit field which takes us 2 bits into next byte */
10946 proto_tree_add_item(cap_tree, hf_ieee80211_vht_max_ampdu, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10947
10948 /* B26 - B27 2 bit field */
10949 proto_tree_add_item(cap_tree, hf_ieee80211_vht_link_adaptation_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10950
10951 /* B28 - B29 2x 1 bit fields */
10952 proto_tree_add_item(cap_tree, hf_ieee80211_vht_rx_pattern, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10953 proto_tree_add_item(cap_tree, hf_ieee80211_vht_tx_pattern, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10954
10955 /* B30 - B31 Reserved */
10956 proto_tree_add_item(cap_tree, hf_ieee80211_vht_reserv, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10957
10958 offset += 4;
10959
10960 /* 8 byte MCS set */
10961 offset = dissect_vht_mcs_set(tree, tvb, offset);
10962
10963 return offset;
10964}
10965
10966static int
10967dissect_vht_operation_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
10968 guint32 tag_len, proto_item *ti_len)
10969{
10970 proto_item *op_item, *ti;
10971 proto_tree *op_tree, *basic_mcs_tree;
10972
10973 if (tag_len != 5) {
10974 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
10975 "VHT Operation IE length %u wrong, must be = 5", tag_len);
10976 return offset;
10977 }
10978
10979 /* 3 byte VHT Operation Info*/
10980 op_item = proto_tree_add_item(tree, hf_ieee80211_vht_op, tvb, offset, 3, ENC_NA0x00000000);
10981 op_tree = proto_item_add_subtree(op_item, ett_vht_op_tree);
10982 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_width, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10983 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_center0, tvb, offset+1, 1, ENC_LITTLE_ENDIAN0x80000000);
10984 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_center1, tvb, offset+2, 1, ENC_LITTLE_ENDIAN0x80000000);
10985
10986 offset += 3;
10987 /* VHT Basic MCS Set */
10988 ti = proto_tree_add_item(tree, hf_ieee80211_vht_op_basic_mcs_map, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10989 basic_mcs_tree = proto_item_add_subtree(ti, ett_vht_basic_mcsbit_tree);
10990 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_1_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10991 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_2_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10992 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_3_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10993 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_4_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10994 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_5_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10995 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_6_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10996 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_7_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10997 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_8_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10998
10999 offset += 2;
11000
11001 return offset;
11002}
11003
11004static int
11005dissect_vht_tx_pwr_envelope(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
11006 guint32 tag_len, proto_item *ti_len)
11007{
11008 proto_item *tx_pwr_item, *ti;
11009 proto_tree *tx_pwr_info_tree;
11010 guint8 opt_ie_cnt=0;
11011 guint8 i;
11012
11013 if (tag_len < 2 || tag_len > 5) {
11014 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
11015 "VHT TX PWR Envelope IE length %u wrong, must be >= 2 and <= 5", tag_len);
11016 return offset;
11017 }
11018
11019 tx_pwr_item = proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_info, tvb, offset, 1, ENC_NA0x00000000);
11020 tx_pwr_info_tree = proto_item_add_subtree(tx_pwr_item, ett_vht_tpe_info_tree);
11021
11022 ti = proto_tree_add_item(tx_pwr_info_tree, hf_ieee80211_vht_tpe_pwr_info_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11023 proto_tree_add_item(tx_pwr_info_tree, hf_ieee80211_vht_tpe_pwr_info_unit, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11024 proto_tree_add_item(tx_pwr_info_tree, hf_ieee80211_vht_tpe_pwr_info_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11025
11026 opt_ie_cnt = tvb_get_guint8(tvb, offset) & 0x07;
11027
11028 offset += 1;
11029
11030 /* Power Constraint info is mandatory only for 20MHz, others are optional*/
11031 /* Power is expressed in terms of 0.5dBm from -64 to 63 and is encoded
11032 * as 8-bit 2's compliment */
11033 for (i = 0; i <= opt_ie_cnt; i++) {
11034 switch(i) {
11035 case 0:
11036 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_20, tvb, offset, 1, ENC_NA0x00000000);
11037 offset += 1;
11038 break;
11039 case 1:
11040 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_40, tvb, offset, 1, ENC_NA0x00000000);
11041 offset += 1;
11042 break;
11043 case 2:
11044 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_80, tvb, offset, 1, ENC_NA0x00000000);
11045 offset += 1;
11046 break;
11047 case 3:
11048 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_160, tvb, offset, 1, ENC_NA0x00000000);
11049 offset += 1;
11050 break;
11051 default:
11052 expert_add_info(pinfo, ti, &ei_ieee80211_vht_tpe_pwr_info_count);
11053 offset += 1;
11054 break;
11055 }
11056 }
11057
11058 return offset;
11059}
11060
11061static void
11062dissect_mobility_domain(proto_tree *tree, tvbuff_t *tvb, int offset,
11063 guint32 tag_len)
11064{
11065 if (tag_len < 3) {
11066 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
11067 "MDIE content length must be at least 3 bytes");
11068 return;
11069 }
11070
11071 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_mdid,
11072 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11073 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_ft_capab,
11074 tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
11075 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds,
11076 tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
11077 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_ft_capab_resource_req,
11078 tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
11079}
11080
11081static void
11082dissect_fast_bss_transition(proto_tree *tree, tvbuff_t *tvb, int offset,
11083 guint32 tag_len)
11084{
11085 int end = offset + tag_len;
11086 if (tag_len < 82) {
11087 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
11088 "FTIE content length must be at least 82 bytes");
11089 return;
11090 }
11091
11092 proto_tree_add_item(tree, hf_ieee80211_tag_ft_mic_control,
11093 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11094 proto_tree_add_item(tree, hf_ieee80211_tag_ft_element_count,
11095 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11096 offset += 2;
11097 proto_tree_add_item(tree, hf_ieee80211_tag_ft_mic,
11098 tvb, offset, 16, ENC_NA0x00000000);
11099 offset += 16;
11100 proto_tree_add_item(tree, hf_ieee80211_tag_ft_anonce,
11101 tvb, offset, 32, ENC_NA0x00000000);
11102 offset += 32;
11103 proto_tree_add_item(tree, hf_ieee80211_tag_ft_snonce,
11104 tvb, offset, 32, ENC_NA0x00000000);
11105 offset += 32;
11106
11107 while (offset + 2 <= end) {
11108 guint8 id, len;
11109 int s_end;
11110 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_id,
11111 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11112 id = tvb_get_guint8(tvb, offset);
11113 offset += 1;
11114
11115 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_len,
11116 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11117 len = tvb_get_guint8(tvb, offset);
11118 offset += 1;
11119
11120 if (offset + len > end) {
11121 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset,
11122 end - offset, "Invalid FTIE subelement");
11123 return;
11124 }
11125
11126 s_end = offset + len;
11127 switch (id) {
11128 case 1:
11129 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_r1kh_id,
11130 tvb, offset, len, ENC_NA0x00000000);
11131 break;
11132 case 2:
11133 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_key_info,
11134 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11135 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_key_id,
11136 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11137 offset += 2;
11138 if (offset > s_end)
11139 break;
11140 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_key_length,
11141 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11142 offset += 1;
11143 if (offset > s_end)
11144 break;
11145 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_rsc,
11146 tvb, offset, 8, ENC_NA0x00000000);
11147 offset += 8;
11148 if (offset > s_end)
11149 break;
11150 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_key,
11151 tvb, offset, s_end - offset, ENC_NA0x00000000);
11152 break;
11153 case 3:
11154 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_r0kh_id,
11155 tvb, offset, len, ENC_NA0x00000000);
11156 break;
11157 case 4:
11158 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_igtk_key_id,
11159 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11160 offset += 2;
11161 if (offset > s_end)
11162 break;
11163 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_igtk_ipn,
11164 tvb, offset, 6, ENC_NA0x00000000);
11165 offset += 6;
11166 if (offset > s_end)
11167 break;
11168 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_igtk_key_length,
11169 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11170 offset += 1;
11171 if (offset > s_end)
11172 break;
11173 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_igtk_key,
11174 tvb, offset, 24, ENC_NA0x00000000);
11175 break;
11176 default:
11177 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_data,
11178 tvb, offset, len, ENC_NA0x00000000);
11179 break;
11180 }
11181 offset = s_end;
11182 }
11183}
11184
11185static void
11186dissect_mmie(proto_tree *tree, tvbuff_t *tvb, int offset, guint32 tag_len)
11187{
11188 if (tag_len < 16) {
11189 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
11190 "MMIE content length must be at least 16 bytes");
11191 return;
11192 }
11193
11194 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_keyid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11195 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_ipn, tvb, offset + 2, 6,
11196 ENC_NA0x00000000);
11197 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_mic, tvb, offset + 8, 8,
11198 ENC_NA0x00000000);
11199}
11200
11201static void
11202dissect_ssid_list(proto_tree *tree, tvbuff_t *tvb, int offset, guint32 tag_len)
11203{
11204 int end = offset + tag_len;
11205 proto_tree *entry;
11206 gboolean first = TRUE(!(0));
11207
11208 while (offset + 1 <= end) {
11209 guint8 len = tvb_get_guint8(tvb, offset + 1);
11210 guint8 *str;
11211
11212 if (offset + 2 + len > end)
11213 break;
11214
11215 str = format_text(tvb_get_string_enc(wmem_packet_scope(), tvb, offset + 2, len, ENC_ASCII0x00000000), len);
11216 proto_item_append_text(tree, "%c %s", (first ? ':' : ','), str);
11217 first = FALSE(0);
11218 entry = proto_tree_add_subtree_format(tree, tvb, offset, 2 + len, ett_ssid_list, NULL((void*)0), "SSID: %s", str);
11219 proto_tree_add_item(entry, hf_ieee80211_tag_number, tvb, offset, 1,
11220 ENC_LITTLE_ENDIAN0x80000000);
11221 offset++;
11222 proto_tree_add_uint(entry, hf_ieee80211_tag_length, tvb, offset, 1, len);
11223 offset++;
11224 proto_tree_add_item(entry, hf_ieee80211_tag_ssid, tvb, offset, len,
11225 ENC_ASCII0x00000000|ENC_NA0x00000000);
11226 offset += len;
11227 }
11228}
11229
11230static void
11231dissect_link_identifier(proto_tree *tree, tvbuff_t *tvb, int offset,
11232 guint32 tag_len)
11233{
11234 if (tag_len < 18) {
11235 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
11236 "Link Identifier content length must be at least "
11237 "18 bytes");
11238 return;
11239 }
11240
11241 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_bssid, tvb,
11242 offset, 6, ENC_NA0x00000000);
11243 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_init_sta, tvb,
11244 offset + 6, 6, ENC_NA0x00000000);
11245 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_resp_sta, tvb,
11246 offset + 12, 6, ENC_NA0x00000000);
11247}
11248
11249static void
11250dissect_wakeup_schedule(proto_tree *tree, tvbuff_t *tvb, int offset,
11251 guint32 tag_len)
11252{
11253 if (tag_len < 18) {
11254 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
11255 "Wakeup Schedule content length must be at least "
11256 "18 bytes");
11257 return;
11258 }
11259
11260 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_offset, tvb,
11261 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
11262 offset += 4;
11263
11264 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_interval, tvb,
11265 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
11266 offset += 4;
11267
11268 proto_tree_add_item(tree,
11269 hf_ieee80211_tag_wakeup_schedule_awake_window_slots, tvb,
11270 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
11271 offset += 4;
11272
11273 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_max_awake_dur,
11274 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
11275 offset += 4;
11276
11277 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_idle_count, tvb,
11278 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11279}
11280
11281static void
11282dissect_channel_switch_timing(proto_tree *tree, tvbuff_t *tvb, int offset,
11283 guint32 tag_len)
11284{
11285 if (tag_len < 4) {
11286 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
11287 "Channel Switch Timing content length must be at "
11288 "least 4 bytes");
11289 return;
11290 }
11291
11292 proto_tree_add_item(tree, hf_ieee80211_tag_channel_switch_timing_switch_time,
11293 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11294 offset += 2;
11295
11296 proto_tree_add_item(tree,
11297 hf_ieee80211_tag_channel_switch_timing_switch_timeout,
11298 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11299}
11300
11301static void
11302dissect_pti_control(proto_tree *tree, tvbuff_t *tvb, int offset,
11303 guint32 tag_len)
11304{
11305 if (tag_len < 3) {
11306 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
11307 "PTI Control content length must be at least "
11308 "3 bytes");
11309 return;
11310 }
11311
11312 proto_tree_add_item(tree, hf_ieee80211_tag_pti_control_tid, tvb,
11313 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11314 offset += 1;
11315
11316 proto_tree_add_item(tree, hf_ieee80211_tag_pti_control_sequence_control, tvb,
11317 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11318}
11319
11320static void
11321dissect_pu_buffer_status(proto_tree *tree, tvbuff_t *tvb, int offset,
11322 guint32 tag_len)
11323{
11324 if (tag_len < 1) {
11325 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
11326 "PU Buffer Status content length must be at least "
11327 "1 byte");
11328 return;
11329 }
11330
11331 proto_tree_add_item(tree, hf_ieee80211_tag_pu_buffer_status_ac_bk, tvb,
11332 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11333 proto_tree_add_item(tree, hf_ieee80211_tag_pu_buffer_status_ac_be, tvb,
11334 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11335 proto_tree_add_item(tree, hf_ieee80211_tag_pu_buffer_status_ac_vi, tvb,
11336 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11337 proto_tree_add_item(tree, hf_ieee80211_tag_pu_buffer_status_ac_vo, tvb,
11338 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11339}
11340
11341static void
11342dissect_timeout_interval(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
11343 guint32 tag_len)
11344{
11345 proto_item *pi;
11346
11347 pi = proto_tree_add_item(tree, hf_ieee80211_tag_timeout_int_type, tvb,
11348 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11349 if (tag_len < 5) {
11350 expert_add_info_format(pinfo, pi, &ei_ieee80211_tag_length,
11351 "Timeout Interval content length must be at least "
11352 "5 bytes");
11353 return;
11354 }
11355
11356 proto_tree_add_item(tree, hf_ieee80211_tag_timeout_int_value, tvb,
11357 offset + 1, 4, ENC_LITTLE_ENDIAN0x80000000);
11358}
11359
11360static int
11361dissect_ric_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset,
11362 guint32 tag_len, proto_item *ti, proto_item *ti_len, int ftype)
11363{
11364
11365 proto_tree *sub_tree;
11366 guint8 desc_cnt = 0;
11367 guint32 next_ie;
11368 int offset_r = 0;
11369 const guint8 ids[] = { TAG_RIC_DESCRIPTOR75 };
11370
11371 if (tag_len != 4) {
11372 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
11373 "RIC Data Length must be 4 bytes");
11374 return 0;
11375 }
11376
11377 proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_id, tvb,
11378 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11379 offset += 1;
11380
11381 desc_cnt = tvb_get_guint8(tvb, offset);
11382 proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_desc_cnt, tvb,
11383 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11384 offset += 1;
11385
11386 proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_status_code, tvb,
11387 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11388 offset += 2;
11389
11390 /* Our Design is such that all the Resource request IE's part of the RIC
11391 * must be in the sub tree of RIC for better readability
11392 * Even omnipeek does the same way.
11393 */
11394 sub_tree = proto_item_add_subtree(tree, ett_tag_ric_data_desc_ie);
11395
11396 proto_item_append_text(ti, " :Resource Descriptor List");
11397 if (desc_cnt == 0) {
11398 proto_item_append_text(ti, " :0 (Weird?)");
11399 }
11400
11401 while ( desc_cnt !=0 ) {
11402
11403 next_ie = tvb_get_guint8(tvb, offset);
11404 proto_item_append_text(ti, " :(%d:%s)", desc_cnt, val_to_str_ext(next_ie, &tag_num_vals_ext, "Reserved (%d)"));
11405 /* Recursive call to avoid duplication of code*/
11406 offset_r = add_tagged_field(pinfo, sub_tree, tvb, offset, ftype, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])));
11407 if (offset_r == 0 )/* should never happen, returns a min of 2*/
11408 break;
11409 /* This will ensure that the IE after RIC is processed
11410 * only once. This gives us a good looking RIC IE :-)
11411 */
11412 tag_len += offset_r;
11413 desc_cnt--;
11414 }
11415
11416 return tag_len;
11417}
11418
11419static int
11420dissect_overlap_bss_scan_par(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset,
11421 guint32 tag_len, proto_item *ti _U___attribute__((unused)), proto_item *ti_len)
11422{
11423
11424 if (tag_len != 14) {
11425 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
11426 "OBSS Length must be 14 bytes");
11427 return 0;
11428 }
11429
11430 proto_tree_add_item(tree, hf_ieee80211_tag_obss_spd, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11431 offset += 2;
11432
11433 proto_tree_add_item(tree, hf_ieee80211_tag_obss_sad, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11434 offset += 2;
11435
11436 proto_tree_add_item(tree, hf_ieee80211_tag_obss_cwtsi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11437 offset += 2;
11438
11439 proto_tree_add_item(tree, hf_ieee80211_tag_obss_sptpc, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11440 offset += 2;
11441
11442 proto_tree_add_item(tree, hf_ieee80211_tag_obss_satpc, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11443 offset += 2;
11444
11445 proto_tree_add_item(tree, hf_ieee80211_tag_obss_wctdf, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11446 offset += 2;
11447
11448 proto_tree_add_item(tree, hf_ieee80211_tag_obss_sat, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11449 offset += 2;
11450
11451 return offset;
11452}
11453
11454static int
11455dissect_ric_descriptor(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset,
11456 guint32 tag_len, proto_item *ti, proto_item *ti_len)
11457{
11458
11459 guint8 rsrc_type = 0;
11460
11461 if (tag_len < 1) {
11462 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
11463 "RIC Data Length must be at least 1 byte");
11464 return 0;
11465 }
11466
11467 rsrc_type = tvb_get_guint8(tvb, offset);
11468 proto_tree_add_item(tree, hf_ieee80211_tag_ric_desc_rsrc_type, tvb,
11469 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11470 offset += 1;
11471
11472 if (rsrc_type == 1) {
11473 /* Block ACK params
11474 * 802.11-2012: 8.4.2.53 RIC Descriptor element
11475 * Block Ack parameter set as defined in 8.4.1.14,
11476 * Block Ack timeout value as defined in 8.4.1.15, and
11477 * Block Ack starting sequence control as defined in 8.3.1.8
11478 */
11479 /* TODO: Still figuring out how to parse these ones,
11480 * need a sample capture with at least HEX Dump
11481 */
11482 proto_item_append_text(ti, " : Block ACK Params");
11483 proto_tree_add_item(tree, hf_ieee80211_tag_ric_desc_var_params, tvb,
11484 offset, tag_len-1, ENC_NA0x00000000);
11485 offset += tag_len -1;
11486 }else {
11487 /* 0, 2-255 are reserved*/
11488 proto_item_append_text(ti, " :Reserved (type != 1)");
11489 }
11490
11491 return offset;
11492}
11493
11494static int
11495dissect_ext_bss_load(proto_tree *tree, tvbuff_t *tvb, int offset)
11496{
11497 proto_tree_add_item(tree, hf_ieee80211_ext_bss_mu_mimo_capable_sta_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11498 offset += 2;
11499 proto_tree_add_item(tree, hf_ieee80211_ext_bss_ss_underutilization, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11500 offset += 1;
11501 proto_tree_add_item(tree, hf_ieee80211_ext_bss_observable_sec_20mhz_utilization, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11502 offset += 1;
11503 proto_tree_add_item(tree, hf_ieee80211_ext_bss_observable_sec_40mhz_utilization, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11504 offset += 1;
11505 proto_tree_add_item(tree, hf_ieee80211_ext_bss_observable_sec_80mhz_utilization, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11506 offset += 1;
11507
11508 return offset;
11509}
11510
11511
11512static int
11513dissect_wide_bw_channel_switch(proto_tree *tree, tvbuff_t *tvb, int offset)
11514{
11515
11516 proto_tree_add_item(tree, hf_ieee80211_wide_bw_new_channel_width, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11517 offset += 1;
11518 proto_tree_add_item(tree, hf_ieee80211_wide_bw_new_channel_center_freq_segment0, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11519 offset += 1;
11520 proto_tree_add_item(tree, hf_ieee80211_wide_bw_new_channel_center_freq_segment1, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11521 offset += 1;
11522
11523 return offset;
11524}
11525static int
11526dissect_channel_switch_wrapper(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset,
11527 guint32 tag_len)
11528{
11529 int tmp_sublen;
11530 const guint8 ids[] = { TAG_COUNTRY_INFO7, TAG_WIDE_BW_CHANNEL_SWITCH194,
11531 TAG_VHT_TX_PWR_ENVELOPE195 };
11532
11533 /*
11534 Decode three subelement in IE-196(Channel Switch Wrapper element):
11535 (1) New Country subelement
11536 (2) Wide Bandwidth Channel Switch subelement
11537 (3) New VHT Transmit Power Envelope subelement
11538 */
11539 while (tag_len > 0){
11540 tmp_sublen = tvb_get_guint8(tvb, offset + 1);
11541 if(add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0]))) == 0){
11542 break;
11543 }
11544 tag_len -= (tmp_sublen + 2);
11545 offset += (tmp_sublen + 2);
11546 }
11547 return offset;
11548}
11549
11550static int
11551dissect_operating_mode_notification(proto_tree *tree, tvbuff_t *tvb, int offset)
11552{
11553 proto_item *ti;
11554 proto_tree *bit_tree;
11555
11556 /* Operating Mode field */
11557 ti = proto_tree_add_item(tree, hf_ieee80211_operat_notification_mode, tvb, offset, 1, ENC_NA0x00000000);
11558 bit_tree = proto_item_add_subtree(ti, ett_mcsbit_tree);
11559 proto_tree_add_item(bit_tree, hf_ieee80211_operat_mode_field_channel_width, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11560 proto_tree_add_item(bit_tree, hf_ieee80211_operat_mode_field_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11561 proto_tree_add_item(bit_tree, hf_ieee80211_operat_mode_field_rxnss, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11562 proto_tree_add_item(bit_tree, hf_ieee80211_operat_mode_field_rxnsstype, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11563
11564 offset += 1;
11565
11566 return offset;
11567}
11568
11569static int
11570dissect_mcs_set(proto_tree *tree, tvbuff_t *tvb, int offset, gboolean basic, gboolean vendorspecific)
11571{
11572 proto_item *ti;
11573 proto_tree *mcs_tree, *bit_tree;
11574 guint8 rx_nss, tx_nss; /* 0-4 for HT and 0-8 for VHT*/
11575 guint32 value_mcs_0_31, value_mcs_32_52, value_mcs_53_76;
11576 guint16 tx_mcs_set;
11577 rx_nss = tx_nss = 8;
11578 /* 16 byte Supported MCS set */
11579 if (vendorspecific)
11580 {
11581 ti = proto_tree_add_string(tree, hf_ieee80211_mcsset_vs, tvb, offset, 16,
11582 basic ? "Basic MCS Set" : "MCS Set");
11583 } else
11584 {
11585 ti = proto_tree_add_string(tree, hf_ieee80211_mcsset, tvb, offset, 16,
11586 basic ? "Basic MCS Set" : "MCS Set");
11587 }
11588 mcs_tree = proto_item_add_subtree(ti, ett_mcsset_tree);
11589
11590 /* Rx MCS Bitmask */
11591 ti = proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_rx_bitmask, tvb, offset, 10, ENC_NA0x00000000);
11592 bit_tree = proto_item_add_subtree(ti, ett_mcsbit_tree);
11593
11594 /* Bits 0 - 31 */
11595 value_mcs_0_31 = tvb_get_letohl(tvb, offset);
11596
11597 /* Handle all zeroes/ff's case..*/
11598 if (value_mcs_0_31 != 0x0)
11599 {
11600 if (!(value_mcs_0_31 & (0xffffff00))) {
11601 /*
11602 * At least one MCS from 0-7 is supported, but no MCS from 8-31 are
11603 * supported, so only 1 spatial stream is supported.
11604 */
11605 rx_nss = 0;
11606 } else if (!(value_mcs_0_31 & (0xffff0000))) {
11607 /*
11608 * At least one MCS from 8-15 is supported, but no MCS from 16-31 are
11609 * supported, so only 2 spatial streams are supported.
11610 */
11611 rx_nss = 1;
11612 } else if (!(value_mcs_0_31 & (0xff000000))) {
11613 /*
11614 * At least one MCS from 16-23 is supported, but no MCS from 24-31 are
11615 * supported, so only 3 spatial streams are supported.
11616 */
11617 rx_nss = 2;
11618 } else {
11619 /*
11620 * At least one MCS from 24-31 is supported, so 4 spatial streams
11621 * are supported.
11622 */
11623 rx_nss = 3;
11624 }
11625 }
11626
11627 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_0to7, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
11628 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_8to15, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
11629 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_16to23, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
11630 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_24to31, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
11631 offset += 4;
11632
11633 /* Should be we check UEQM Supported?*/
11634 /* Bits 32 - 52 */
11635 value_mcs_32_52 = tvb_get_letohl(tvb, offset);
11636 if (!(value_mcs_32_52 & (0x1ffffe))) {
11637 /*
11638 * MCS 33-52 aren't supported, so the number of spatial streams we get
11639 * from whichever MCSes from 0-31 that we support is the total number
11640 * of spatial streams we support.
11641 */
11642 ;
11643 } else if (!(value_mcs_32_52 & (0x1fff80))) {
11644 /*
11645 * At least one MCS from 33-38 is supported, but no MCS from 39-52 is
11646 * supported, so we have at least 2 spatial streams, but none of the
11647 * MCSs in that range give us any more.
11648 */
11649 rx_nss = MAX(1, rx_nss)(((1) > (rx_nss)) ? (1) : (rx_nss));
11650 } else {
11651 /*
11652 * At least one MCS from 39-52 is supported, so we have at least 3
11653 * spatial streams.
11654 */
11655 rx_nss = MAX(2, rx_nss)(((2) > (rx_nss)) ? (2) : (rx_nss));
11656 }
11657
11658 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_32, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
11659 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_33to38, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
11660 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_39to52, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
11661 offset += 2;
11662
11663 /* Bits 53 - 76 */
11664 value_mcs_53_76 = tvb_get_letohl(tvb, offset);
11665 if ((value_mcs_53_76 & (0x1fffffe0))) {
11666 /*
11667 * At least one MCS from 53-76 is supported, so we have at least 4
11668 * spatial streams.
11669 */
11670 rx_nss = MAX(3, rx_nss)(((3) > (rx_nss)) ? (3) : (rx_nss));
11671 }
11672
11673 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_53to76, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
11674 offset += 4;
11675
11676 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_highest_data_rate, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11677 offset += 2;
11678
11679 /* Follow table 8-126 from 802.11-2012 */
11680 tx_mcs_set = tvb_get_letohs(tvb, offset);
11681
11682 if (!(tx_mcs_set & 0x0001) && !(tx_mcs_set & 0x0002))
11683 {
11684 /* TX MCS Set is not defined
11685 * so there is no interpretation for Max Tx Spatial Streams
11686 */
11687 tx_nss = 4; /* Not Defined*/
11688 }
11689
11690 if ((tx_mcs_set & 0x0001) && !(tx_mcs_set & 0x0002))
11691 {
11692 /* TX MCS Set is defined to be equal to Rx MCS Set
11693 * So, get the Max Spatial Streams from Rx
11694 * MCS set
11695 */
11696 tx_nss = rx_nss;
11697 }
11698 proto_item_append_text(ti, ": %s", val_to_str(rx_nss, mcsset_tx_max_spatial_streams_flags, "Reserved:%d" ) );
11699
11700 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_mcs_set_defined, tvb, offset, 1,
11701 ENC_LITTLE_ENDIAN0x80000000);
11702 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal, tvb, offset, 1,
11703 ENC_LITTLE_ENDIAN0x80000000);
11704 ti = proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_max_spatial_streams, tvb, offset, 1,
11705 ENC_LITTLE_ENDIAN0x80000000);
11706 proto_item_append_text(ti, ", %s", val_to_str(tx_nss, mcsset_tx_max_spatial_streams_flags, "Reserved:%d" ) );
11707 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_unequal_modulation, tvb, offset, 1,
11708 ENC_LITTLE_ENDIAN0x80000000);
11709 offset += 1;
11710
11711 offset += 3;
11712 return offset;
11713}
11714
11715/* 802.11n D1.10 - HT Information IE */
11716static int
11717dissect_ht_info_ie_1_1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
11718 guint32 tag_len, proto_item *ti_len)
11719{
11720 proto_item *cap_item;
11721 proto_tree *cap_tree;
11722
11723 cap_tree = tree;
11724
11725 if (tag_len < 22) {
11726 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
11727 "HT Information IE content length %u wrong, must be at least 22 bytes", tag_len);
11728 return offset;
11729 }
11730
11731
11732 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_primary_channel, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11733 offset += 1;
11734
11735 cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_info_delimiter1, tvb,
11736 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11737 cap_tree = proto_item_add_subtree(cap_item, ett_ht_info_delimiter1_tree);
11738 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_secondary_channel_offset, tvb,
11739 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11740 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_channel_width, tvb,
11741 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11742 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_rifs_mode, tvb,
11743 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11744 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_psmp_stas_only, tvb,
11745 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11746 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_service_interval_granularity, tvb,
11747 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11748 offset += 1;
11749
11750 cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_info_delimiter2, tvb,
11751 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11752 cap_tree = proto_item_add_subtree(cap_item, ett_ht_info_delimiter2_tree);
11753 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_operating_mode, tvb,
11754 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11755 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_non_greenfield_sta_present, tvb,
11756 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11757 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_transmit_burst_limit, tvb,
11758 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11759 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_obss_non_ht_stas_present, tvb,
11760 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11761 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_reserved_1, tvb,
11762 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11763 offset += 2;
11764
11765 cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_info_delimiter3, tvb,
11766 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11767 cap_tree = proto_item_add_subtree(cap_item, ett_ht_info_delimiter3_tree);
11768 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_reserved_2, tvb,
11769 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11770 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_dual_beacon, tvb,
11771 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11772 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_dual_cts_protection, tvb,
11773 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11774 offset += 1;
11775 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_secondary_beacon, tvb,
11776 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11777 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_lsig_txop_protection_full_support, tvb,
11778 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11779 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_pco_active, tvb,
11780 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11781 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_pco_phase, tvb,
11782 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11783 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_reserved_3, tvb,
11784 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11785 offset += 1;
11786
11787 offset = dissect_mcs_set(tree, tvb, offset, TRUE(!(0)), FALSE(0));
11788
11789 return offset;
11790}
11791
11792
11793static int
11794dissect_wapi_param_set(tvbuff_t *tvb, packet_info *pinfo,
11795 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len,
11796 proto_item *ti, int ftype)
11797{
11798 /* Parse the WAPI Parameter Set IE Here*/
11799 proto_item *item;
11800 proto_tree *subtree;
11801 guint16 loop_cnt, version, akm_cnt = 1, ucast_cnt = 1, bkid_cnt = 1;
11802 guint8 akm_suite_type = 0, ucast_cipher_type = 0, mcast_cipher_type = 0;
11803
11804 version = tvb_get_letohs(tvb, offset);
11805 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_version, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11806 offset += 2;
11807
11808 /*MIN: 2 + (2+4)+ (2+4) + 4 + 2 + 0 (BKID CNT and LIST) =20*/
11809 if (tag_len < 20) {
11810 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
11811 "tag_len is %d, it's neither WAPI not BSS-AC-Access-Delay", tag_len);
11812 return offset;
11813 }
11814
11815 if (version != 1) {
11816 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
11817 "Version of WAPI protocol is %d, must be = 1", version);
11818 return offset;
11819 }
11820
11821 /* AKM Suites: list can't be 0*/
11822 akm_cnt = tvb_get_letohs(tvb, offset);
11823 item = proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_akm_suite_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11824 offset += 2;
11825 if (akm_cnt != 0) {
11826 proto_item_append_text(ti, " : AKM Suite List:");
11827 for (loop_cnt = 0; loop_cnt < akm_cnt; loop_cnt++) {
11828 subtree = proto_item_add_subtree(item, ett_tag_wapi_param_set_akm_tree);
11829 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_akm_suite_oui, tvb, offset, 3, ENC_NA0x00000000);
11830 offset += 3;
11831 akm_suite_type = tvb_get_guint8(tvb, offset);
11832 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_akm_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11833 offset += 1;
11834 proto_item_append_text(ti, " (%d,%s)", loop_cnt+1, val_to_str(akm_suite_type,
11835 ieee80211_wapi_suite_type_short, "Reserved: %d"));
11836 }
11837 proto_item_append_text(ti, " /");
11838 } else {
11839 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Number of AKM suites is 0, must be min 1");
11840 return offset;
11841
11842 }
11843 /* Unicast Cipher Suites: list can't be 0*/
11844 ucast_cnt = tvb_get_letohs(tvb, offset);
11845 item = proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count,
11846 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11847 offset += 2;
11848 if (ucast_cnt != 0) {
11849 proto_item_append_text(ti, " Unicast Cipher List:");
11850 for (loop_cnt = 0; loop_cnt < ucast_cnt; loop_cnt++) {
11851 subtree = proto_item_add_subtree(item, ett_tag_wapi_param_set_ucast_tree);
11852 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui, tvb, offset, 3, ENC_NA0x00000000);
11853 offset += 3;
11854 ucast_cipher_type = tvb_get_guint8(tvb, offset);
11855 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11856 offset += 1;
11857 proto_item_append_text(ti, " (%d,%s)", loop_cnt+1, val_to_str(ucast_cipher_type, ieee80211_wapi_cipher_type, "Reserved: %d"));
11858 }
11859 proto_item_append_text(ti, " /");
11860 } else {
11861 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Number of Unicast Cipher suites is 0, must be min 1");
11862 return offset;
11863
11864 }
11865
11866 /* Multicast Cipher Suites*/
11867 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui, tvb, offset, 3, ENC_NA0x00000000);
11868 offset += 3;
11869 mcast_cipher_type = tvb_get_guint8(tvb, offset);
11870 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11871 offset += 1;
11872 proto_item_append_text(ti, " Multicast Cipher: %s", val_to_str(mcast_cipher_type, ieee80211_wapi_cipher_type, "Reserved: %d"));
11873
11874 /* WAPI capability*/
11875 item = proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_capab, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11876 subtree = proto_item_add_subtree(item, ett_tag_wapi_param_set_preauth_tree);
11877 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_capab_preauth, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11878 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_capab_rsvd, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11879
11880 offset += 2;
11881 /* BKID List: The list can be 0
11882 * Applicable only for assoc/re-assoc
11883 */
11884 if (ftype == MGT_ASSOC_REQ0x00 || ftype == MGT_REASSOC_REQ0x02 ) {
11885 bkid_cnt = tvb_get_letohs(tvb, offset);
11886 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_bkid_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11887 offset += 2;
11888 if (bkid_cnt != 0) {
11889 for (loop_cnt = 0; loop_cnt < bkid_cnt; loop_cnt++) {
11890 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_bkid_list, tvb, offset, 16, ENC_NA0x00000000);
11891 offset += 16;
11892 }
11893 }
11894 }
11895 return offset;
11896}
11897
11898static int
11899dissect_bss_max_idle_period(proto_tree *tree, tvbuff_t *tvb, int offset)
11900{
11901 proto_tree_add_item(tree, hf_ieee80211_tag_bss_max_idle_period,
11902 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11903 offset += 2;
11904 proto_tree_add_item(tree, hf_ieee80211_tag_bss_max_idle_options_protected,
11905 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11906 offset++;
11907 return offset;
11908}
11909
11910enum tfs_request_subelem_id {
11911 TFS_REQ_SUBELEM_TFS = 1,
11912 TFS_REQ_SUBELEM_VENDOR_SPECIFIC = 221
11913};
11914
11915static const value_string tfs_request_subelem_ids[] = {
11916 { TFS_REQ_SUBELEM_TFS, "TFS subelement" },
11917 { TFS_REQ_SUBELEM_VENDOR_SPECIFIC, "Vendor Specific subelement" },
11918 { 0, NULL((void*)0) }
11919};
11920
11921static int
11922dissect_tfs_request(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset,
11923 guint32 tag_len, int ftype)
11924{
11925 int end = offset + tag_len;
11926 const guint8 ids[] = {
11927 1, /* TFS Subelement */
11928 TAG_VENDOR_SPECIFIC_IE221
11929 };
11930
11931 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_id,
11932 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11933 offset++;
11934 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_ac_delete_after_match,
11935 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11936 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_ac_notify,
11937 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11938 offset++;
11939 if (offset + 1 >= end) {
11940 expert_add_info_format(pinfo, tree, &ei_ieee80211_missing_data,
11941 "No TFS Request subelements in TFS Request");
11942 return end;
11943 }
11944
11945 while (offset + 1 < end) {
11946 guint8 id, len;
11947 int s_offset, s_end;
11948
11949 id = tvb_get_guint8(tvb, offset);
11950 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem_id,
11951 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11952 offset++;
11953 len = tvb_get_guint8(tvb, offset);
11954 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem_len,
11955 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11956 offset++;
11957 if (offset + len > end) {
11958 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
11959 "Not enough data for TFS Request subelement");
11960 return end;
11961 }
11962 switch (id) {
11963 case TFS_REQ_SUBELEM_TFS:
11964 s_offset = offset;
11965 s_end = offset + len;
11966 while (s_offset < s_end) {
11967 /* TODO 1 is interpreted as TAG_SUPP_RATES, fix this! */
11968 int tlen = add_tagged_field(pinfo, tree, tvb, s_offset, ftype, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])));
11969 if (tlen==0)
11970 break;
11971 s_offset += tlen;
11972 }
11973 break;
11974 default:
11975 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem,
11976 tvb, offset, len, ENC_NA0x00000000);
11977 break;
11978 }
11979 offset += len;
11980 }
11981
11982 if (offset < end) {
11983 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_extra_data,
11984 tvb, offset, end - offset, "Extra data after TFS Subelements");
11985 }
11986
11987 return end;
11988}
11989
11990enum tfs_response_subelem_id {
11991 TFS_RESP_SUBELEM_TFS_STATUS = 1,
11992 TFS_RESP_SUBELEM_TFS = 2,
11993 TFS_RESP_SUBELEM_VENDOR_SPECIFIC = 221
11994};
11995
11996static const value_string tfs_response_subelem_ids[] = {
11997 { TFS_RESP_SUBELEM_TFS_STATUS, "TFS Status subelement" },
11998 { TFS_RESP_SUBELEM_TFS, "TFS subelement" },
11999 { TFS_RESP_SUBELEM_VENDOR_SPECIFIC, "Vendor Specific subelement" },
12000 { 0, NULL((void*)0) }
12001};
12002
12003static int
12004dissect_tfs_response(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
12005 int offset, guint32 tag_len, int ftype)
12006{
12007 int end = offset + tag_len;
12008 const guint8 ids[] = {
12009 1, /* TFS Status subelement*/
12010 2, /* TFS subelement */
12011 TAG_VENDOR_SPECIFIC_IE221
12012 };
12013
12014 while (offset + 3 <= end) {
12015 guint8 id, len;
12016 int s_offset, s_end;
12017
12018 id = tvb_get_guint8(tvb, offset);
12019 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem_id,
12020 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12021 offset++;
12022 len = tvb_get_guint8(tvb, offset);
12023 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem_len,
12024 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12025 offset++;
12026 if (offset + len > end) {
12027 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
12028 "Not enough data for TFS Request subelement");
12029 return end;
12030 }
12031 switch (id) {
12032 case TFS_RESP_SUBELEM_TFS_STATUS:
12033 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_status,
12034 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12035 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_id,
12036 tvb, offset + 1, 1, ENC_LITTLE_ENDIAN0x80000000);
12037 break;
12038 case TFS_RESP_SUBELEM_TFS:
12039 s_offset = offset;
12040 s_end = offset + len;
12041 while (s_offset < s_end) {
12042 /* TODO Element IDs 1 and 2 are misinterpreted! */
12043 int tlen = add_tagged_field(pinfo, tree, tvb, s_offset, ftype, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])));
12044 if (tlen==0)
12045 break;
12046 s_offset += tlen;
12047 }
12048 break;
12049 default:
12050 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem,
12051 tvb, offset, len, ENC_NA0x00000000);
12052 break;
12053 }
12054
12055 offset += len;
12056 }
12057
12058 if (offset < end) {
12059 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_extra_data,
12060 tvb, offset, end - offset, "Extra data after TFS Subelements");
12061 }
12062
12063 return end;
12064}
12065
12066static const value_string wnm_sleep_mode_action_types[] = {
12067 { 0, "Enter WNM-Sleep Mode" },
12068 { 1, "Exit WNM-Sleep Mode" },
12069 { 0, NULL((void*)0) }
12070};
12071
12072static const value_string wnm_sleep_mode_response_status_vals[] = {
12073 { 0, "Enter/Exit WNM-Sleep Mode Accept" },
12074 { 1, "Exit WNM-Sleep Mode Accept, GTK/IGTK update required" },
12075 { 2, "Denied. The AP is unable to perform the requested action." },
12076 { 3, "Denied temporarily. The AP is unable to perform the requested action "
12077 "at the current time. The request can be submitted again at a later time."
12078 },
12079 { 4, "Denied. Due to the pending key expiration." },
12080 { 5, "Denied. The requested action was not granted due to other WNM services "
12081 "in use by the requesting STA." },
12082 { 0, NULL((void*)0) }
12083};
12084
12085static int
12086dissect_wnm_sleep_mode(proto_tree *tree, tvbuff_t *tvb, int offset)
12087{
12088 proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_action_type,
12089 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12090 offset++;
12091 proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_response_status,
12092 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12093 offset++;
12094 proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_interval,
12095 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12096 offset += 2;
12097 return offset;
12098}
12099
12100static const value_string time_adv_timing_capab_vals[] = {
12101 { 0, "No standardized external time source" },
12102 { 1, "Timestamp offset based on UTC" },
12103 { 2, "UTC time at which the TSF timer is 0" },
12104 { 0, NULL((void*)0) }
12105};
12106
12107static int
12108dissect_time_adv(proto_tree *tree, tvbuff_t *tvb, int offset)
12109{
12110 guint8 capab;
12111 proto_item *item;
12112 proto_tree *subtree;
12113 struct tm tm, *now;
12114 time_t t;
12115
12116 capab = tvb_get_guint8(tvb, offset);
12117 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_timing_capab,
12118 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12119 offset += 1;
12120
12121 switch (capab) {
12122 case 1:
12123 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_value,
12124 tvb, offset, 10, ENC_NA0x00000000);
12125 offset += 10;
12126
12127 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_error,
12128 tvb, offset, 5, ENC_NA0x00000000);
12129 offset += 5;
12130 break;
12131 case 2:
12132 item = proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_value,
12133 tvb, offset, 10, ENC_NA0x00000000);
12134 subtree = proto_item_add_subtree(item, ett_tag_time_adv_tree);
12135 memset(&tm, 0, sizeof(tm));
12136 tm.tm_year = tvb_get_letohs(tvb, offset) - 1900;
12137 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_year,
12138 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12139 offset += 2;
12140 tm.tm_mon = tvb_get_guint8(tvb, offset) - 1;
12141 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_month,
12142 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12143 offset += 1;
12144 tm.tm_mday = tvb_get_guint8(tvb, offset);
12145 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_day,
12146 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12147 offset += 1;
12148 tm.tm_hour = tvb_get_guint8(tvb, offset);
12149 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_hours,
12150 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12151 offset += 1;
12152 tm.tm_min = tvb_get_guint8(tvb, offset);
12153 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_minutes,
12154 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12155 offset += 1;
12156 tm.tm_sec = tvb_get_guint8(tvb, offset);
12157 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_seconds,
12158 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12159 offset += 1;
12160 proto_tree_add_item(subtree,
12161 hf_ieee80211_tag_time_adv_time_value_milliseconds,
12162 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12163 offset += 2;
12164 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_reserved,
12165 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12166 offset += 1;
12167
12168 tm.tm_isdst = -1;
12169 t = mktime(&tm);
12170 if (t != -1) {
12171 t += (time_t)(last_timestamp / 1000000);
12172 now = localtime(&t);
12173 if (now)
12174 proto_item_append_text(item,
12175 ": current time=%u-%02u-%02u %02u:%02u:%02u",
12176 now->tm_year + 1900, now->tm_mon + 1,
12177 now->tm_mday, now->tm_hour, now->tm_min,
12178 now->tm_sec);
12179 }
12180
12181 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_error,
12182 tvb, offset, 5, ENC_NA0x00000000);
12183 offset += 5;
12184
12185 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_update_counter,
12186 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12187 offset += 1;
12188 break;
12189 }
12190
12191 return offset;
12192}
12193
12194static int
12195dissect_time_zone(proto_tree *tree, tvbuff_t *tvb, int offset,
12196 guint32 tag_len)
12197{
12198 proto_tree_add_item(tree, hf_ieee80211_tag_time_zone, tvb, offset, tag_len,
12199 ENC_ASCII0x00000000|ENC_NA0x00000000);
12200 return offset + tag_len;
12201}
12202
12203static int
12204dissect_ap_channel_report(tvbuff_t *tvb, packet_info *pinfo,
12205 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len,
12206 int tag_end, proto_item *ti)
12207{
12208 if (tag_len < 1) {
12209 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
12210 "AP Channel Report length %u wrong, must be > 1", tag_len);
12211 return offset;
12212 }
12213
12214 proto_tree_add_item(tree, hf_ieee80211_tag_ap_channel_report_operating_class, tvb,
12215 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12216 proto_item_append_text(ti, ": Operating Class %u, Channel List :", tvb_get_guint8(tvb, offset));
12217 offset += 1;
12218
12219 while (offset < tag_end)
12220 {
12221 proto_tree_add_item(tree, hf_ieee80211_tag_ap_channel_report_channel_list, tvb, offset, 1, ENC_NA0x00000000);
12222 proto_item_append_text(ti, " %u,", tvb_get_guint8(tvb, offset));
12223 offset += 1;
12224 }
12225 return offset;
12226}
12227
12228
12229static int
12230dissect_secondary_channel_offset_ie(tvbuff_t *tvb, packet_info *pinfo,
12231 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len)
12232{
12233
12234 if (tag_len != 1) {
12235 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
12236 "Secondary Channel Offset length %u wrong, must be = 1", tag_len);
12237 return offset;
12238 }
12239
12240 proto_tree_add_item(tree, hf_ieee80211_tag_secondary_channel_offset, tvb,
12241 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12242
12243 offset += 1;
12244
12245 return offset;
12246}
12247
12248static int
12249dissect_bss_avg_access_delay_ie(tvbuff_t *tvb, packet_info *pinfo,
12250 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len)
12251{
12252
12253 if (tag_len != 1) {
12254 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
12255 "BSS Average Access Delay length %u wrong, must be = 1", tag_len);
12256 return offset;
12257 }
12258
12259 proto_tree_add_item(tree, hf_ieee80211_tag_bss_ap_avg_access_delay, tvb,
12260 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12261
12262 offset += 1;
12263
12264 return offset;
12265}
12266
12267static int
12268dissect_antenna_ie(tvbuff_t *tvb, packet_info *pinfo,
12269 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len)
12270{
12271
12272 if (tag_len != 1) {
12273 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
12274 "Antenna length %u wrong, must be = 1", tag_len);
12275 return offset;
12276 }
12277
12278 proto_tree_add_item(tree, hf_ieee80211_tag_antenna_id, tvb,
12279 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12280
12281 offset += 1;
12282
12283 return offset;
12284}
12285
12286static int
12287dissect_rsni_ie(tvbuff_t *tvb, packet_info *pinfo,
12288 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len)
12289{
12290
12291 if (tag_len != 1) {
12292 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
12293 "RSNI length %u wrong, must be = 1", tag_len);
12294 return offset;
12295 }
12296
12297 proto_tree_add_item(tree, hf_ieee80211_tag_rsni, tvb,
12298 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12299
12300 offset += 1;
12301
12302 return offset;
12303}
12304
12305static int
12306dissect_bss_available_admission_capacity_ie(tvbuff_t *tvb, packet_info *pinfo,
12307 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len)
12308{
12309 proto_item *ti;
12310 proto_tree *btree;
12311 guint16 bitmask;
12312 if (tag_len < 2) {
12313 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
12314 "BSS Available Admission Capacity length %u wrong, must > = 2", tag_len);
12315 return offset;
12316 }
12317
12318 ti = proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask, tvb,
12319 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12320 btree = proto_item_add_subtree(ti, ett_tag_bss_bitmask_tree);
12321 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12322 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12323 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12324 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12325 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12326 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12327 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12328 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12329 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12330 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12331 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12332 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12333 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12334 bitmask = tvb_get_letohs(tvb, offset);
12335 offset += 2;
12336
12337 if(bitmask & BSS_BITMASK_UP00x0001)
12338 {
12339 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up0, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12340 offset += 2;
12341 }
12342 if(bitmask & BSS_BITMASK_UP10x0002)
12343 {
12344 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up1, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12345 offset += 2;
12346 }
12347 if(bitmask & BSS_BITMASK_UP20x0004)
12348 {
12349 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up2, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12350 offset += 2;
12351 }
12352 if(bitmask & BSS_BITMASK_UP30x0008)
12353 {
12354 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up3, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12355 offset += 2;
12356 }
12357 if(bitmask & BSS_BITMASK_UP40x0010)
12358 {
12359 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up4, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12360 offset += 2;
12361 }
12362 if(bitmask & BSS_BITMASK_UP50x0020)
12363 {
12364 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up5, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12365 offset += 2;
12366 }
12367 if(bitmask & BSS_BITMASK_UP60x0040)
12368 {
12369 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up6, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12370 offset += 2;
12371 }
12372 if(bitmask & BSS_BITMASK_UP70x0080)
12373 {
12374 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up7, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12375 offset += 2;
12376 }
12377 if(bitmask & BSS_BITMASK_AC00x0100)
12378 {
12379 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac0, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12380 offset += 2;
12381 }
12382 if(bitmask & BSS_BITMASK_AC10x0200)
12383 {
12384 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac1, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12385 offset += 2;
12386 }
12387 if(bitmask & BSS_BITMASK_AC20x0400)
12388 {
12389 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac2, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12390 offset += 2;
12391 }
12392 if(bitmask & BSS_BITMASK_AC30x0800)
12393 {
12394 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac3, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12395 offset += 2;
12396 }
12397 return offset;
12398}
12399
12400static int
12401dissect_bss_ac_access_delay_ie(tvbuff_t *tvb, packet_info *pinfo,
12402 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len)
12403{
12404
12405 if (tag_len != 4) {
12406 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
12407 "BSS AC Access Delay length %u wrong, must = 4", tag_len);
12408 return offset;
12409 }
12410
12411 /* TODO: Display the scaled representation of the average
12412 medium access delay (a big (precalculed) value_string ?)
12413 See 8.4.2.46 BSS AC Access Delay element ... */
12414
12415 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_be, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12416 offset += 1;
12417 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_bk, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12418 offset += 1;
12419 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_vi, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12420 offset += 1;
12421 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_vo, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12422 offset += 1;
12423
12424 return offset;
12425}
12426
12427static int
12428dissect_rm_enabled_capabilities_ie(packet_info *pinfo, proto_tree *tree,
12429 proto_item *ti, proto_item *ti_len,
12430 guint32 tag_len, tvbuff_t *tvb,
12431 int offset, int tag_end _U___attribute__((unused)))
12432{
12433 proto_item *ti_ex_cap;
12434 proto_tree *ex_cap_tree;
12435
12436 if (tag_len != 5)
12437 {
12438 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "RM Enabled Capabilities length %u wrong, must = 5", tag_len);
12439 return offset;
12440 }
12441 proto_item_append_text(ti, " (%d octets)", tag_len);
12442
12443 /* RM Enabled Capability octet 1 */
12444 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_rm_enabled_capabilities, tvb, offset, 1, ENC_NA0x00000000);
12445 proto_item_append_text(ti_ex_cap, " (octet 1)");
12446 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_rm_cap1);
12447 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b0, tvb, offset, 1, ENC_NA0x00000000);
12448 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b1, tvb, offset, 1, ENC_NA0x00000000);
12449 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b2, tvb, offset, 1, ENC_NA0x00000000);
12450 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b3, tvb, offset, 1, ENC_NA0x00000000);
12451 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b4, tvb, offset, 1, ENC_NA0x00000000);
12452 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b5, tvb, offset, 1, ENC_NA0x00000000);
12453 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b6, tvb, offset, 1, ENC_NA0x00000000);
12454 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b7, tvb, offset, 1, ENC_NA0x00000000);
12455 offset += 1;
12456
12457 /* RM Enabled Capability octet 2 */
12458 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_rm_enabled_capabilities, tvb, offset, 1, ENC_NA0x00000000);
12459 proto_item_append_text(ti_ex_cap, " (octet 2)");
12460 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_rm_cap2);
12461 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b8, tvb, offset, 1, ENC_NA0x00000000);
12462 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b9, tvb, offset, 1, ENC_NA0x00000000);
12463 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b10, tvb, offset, 1, ENC_NA0x00000000);
12464 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b11, tvb, offset, 1, ENC_NA0x00000000);
12465 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b12, tvb, offset, 1, ENC_NA0x00000000);
12466 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b13, tvb, offset, 1, ENC_NA0x00000000);
12467 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b14, tvb, offset, 1, ENC_NA0x00000000);
12468 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b15, tvb, offset, 1, ENC_NA0x00000000);
12469 offset += 1;
12470
12471 /* RM Enabled Capability octet 3 */
12472 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_rm_enabled_capabilities, tvb, offset, 1, ENC_NA0x00000000);
12473 proto_item_append_text(ti_ex_cap, " (octet 3)");
12474 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_rm_cap3);
12475 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b16, tvb, offset, 1, ENC_NA0x00000000);
12476 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b17, tvb, offset, 1, ENC_NA0x00000000);
12477 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b18to20, tvb, offset, 1, ENC_NA0x00000000);
12478 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b21to23, tvb, offset, 1, ENC_NA0x00000000);
12479 offset += 1;
12480
12481 /* RM Enabled Capability octet 4 */
12482 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_rm_enabled_capabilities, tvb, offset, 1, ENC_NA0x00000000);
12483 proto_item_append_text(ti_ex_cap, " (octet 4)");
12484 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_rm_cap4);
12485 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b24to26, tvb, offset, 1, ENC_NA0x00000000);
12486 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b27, tvb, offset, 1, ENC_NA0x00000000);
12487 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b28, tvb, offset, 1, ENC_NA0x00000000);
12488 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b29, tvb, offset, 1, ENC_NA0x00000000);
12489 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b30, tvb, offset, 1, ENC_NA0x00000000);
12490 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b31, tvb, offset, 1, ENC_NA0x00000000);
12491 offset += 1;
12492
12493 /* RM Enabled Capability octet 5 */
12494 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_rm_enabled_capabilities, tvb, offset, 1, ENC_NA0x00000000);
12495 proto_item_append_text(ti_ex_cap, " (octet 5)");
12496 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_rm_cap5);
12497 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b32, tvb, offset, 1, ENC_NA0x00000000);
12498 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b33, tvb, offset, 1, ENC_NA0x00000000);
12499 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_o5, tvb, offset, 1, ENC_NA0x00000000);
12500 offset += 1;
12501
12502 return offset;
12503}
12504
12505static int
12506dissect_ht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
12507 guint32 tag_len, proto_item *ti_len, gboolean vendorspecific)
12508{
12509 proto_item *cap_item, *ti;
12510 proto_tree *cap_tree;
12511
12512 if (tag_len != 26) {
12513 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
12514 "HT Capabilities IE length %u wrong, must be = 26", tag_len);
12515 return offset;
12516 }
12517
12518 if (wlan_ignore_draft_ht && vendorspecific)
12519 return offset;
12520
12521 /* 2 byte HT Capabilities Info*/
12522 if (vendorspecific)
12523 {
12524 cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_vs_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12525 }
12526 else
12527 {
12528 cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12529 }
12530 cap_tree = proto_item_add_subtree(cap_item, ett_ht_cap_tree);
12531 proto_tree_add_item(cap_tree, hf_ieee80211_ht_ldpc_coding, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12532 proto_tree_add_item(cap_tree, hf_ieee80211_ht_chan_width, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12533 proto_tree_add_item(cap_tree, hf_ieee80211_ht_sm_pwsave, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12534 proto_tree_add_item(cap_tree, hf_ieee80211_ht_green, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12535 proto_tree_add_item(cap_tree, hf_ieee80211_ht_short20, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12536 proto_tree_add_item(cap_tree, hf_ieee80211_ht_short40, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12537 proto_tree_add_item(cap_tree, hf_ieee80211_ht_tx_stbc, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12538
12539 proto_tree_add_item(cap_tree, hf_ieee80211_ht_rx_stbc, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12540 proto_tree_add_item(cap_tree, hf_ieee80211_ht_delayed_block_ack, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12541 proto_tree_add_item(cap_tree, hf_ieee80211_ht_max_amsdu, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12542 proto_tree_add_item(cap_tree, hf_ieee80211_ht_dss_cck_40, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12543 proto_tree_add_item(cap_tree, hf_ieee80211_ht_psmp, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12544 proto_tree_add_item(cap_tree, hf_ieee80211_ht_40_mhz_intolerant, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12545 proto_tree_add_item(cap_tree, hf_ieee80211_ht_l_sig, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12546 offset += 2;
12547
12548 /* 1 byte A-MPDU Parameters */
12549 if (vendorspecific)
12550 {
12551 cap_item = proto_tree_add_item(tree, hf_ieee80211_ampduparam_vs, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12552 } else
12553 {
12554 cap_item = proto_tree_add_item(tree, hf_ieee80211_ampduparam, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12555 }
12556 cap_tree = proto_item_add_subtree(cap_item, ett_ampduparam_tree);
12557 ti = proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_mpdu, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12558 proto_item_append_text(ti, " (%04.0f[Bytes])", pow(2, 13+(tvb_get_guint8(tvb, offset) & 0x3))-1);
12559 proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_mpdu_start_spacing, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12560 proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12561 offset += 1;
12562
12563 /* 16 byte MCS set */
12564 offset = dissect_mcs_set(tree, tvb, offset, FALSE(0), vendorspecific);
12565
12566
12567 /* 2 byte HT Extended Capabilities */
12568 if (vendorspecific)
12569 {
12570 cap_item = proto_tree_add_item(tree, hf_ieee80211_htex_vs_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12571 } else {
12572 cap_item = proto_tree_add_item(tree, hf_ieee80211_htex_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12573 }
12574 cap_tree = proto_item_add_subtree(cap_item, ett_htex_cap_tree);
12575 proto_tree_add_item(cap_tree, hf_ieee80211_htex_pco, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12576 proto_tree_add_item(cap_tree, hf_ieee80211_htex_transtime, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12577
12578 proto_tree_add_item(cap_tree, hf_ieee80211_htex_mcs, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12579 proto_tree_add_item(cap_tree, hf_ieee80211_htex_htc_support, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12580 proto_tree_add_item(cap_tree, hf_ieee80211_htex_rd_responder, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12581 offset += 2;
12582
12583
12584 /* 4 byte TxBF capabilities */
12585 if (vendorspecific)
12586 {
12587 cap_item = proto_tree_add_item(tree, hf_ieee80211_txbf_vs, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12588 } else {
12589 cap_item = proto_tree_add_item(tree, hf_ieee80211_txbf, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12590 }
12591 cap_tree = proto_item_add_subtree(cap_item, ett_txbf_tree);
12592 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12593 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_rcv_ssc, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12594 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_tx_ssc, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12595 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_rcv_ndp, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12596 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_tx_ndp, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12597 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_impl_txbf, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12598 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_calib, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12599
12600 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_csi, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12601 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_uncomp_fm, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12602 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_comp_fm, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12603 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_bf_csi, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12604 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_uncomp_fm_feed, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12605 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_comp_fm_feed, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12606
12607 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_min_group, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12608 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_csi_num_bf_ant, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12609 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_uncomp_sm_bf_ant, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12610 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_comp_sm_bf_ant, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12611
12612 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_csi_max_rows_bf, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12613 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_chan_est, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12614 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_resrv, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12615 offset += 4;
12616
12617 /* 1 byte Antenna Selection (ASEL) capabilities */
12618 if (vendorspecific)
12619 {
12620 cap_item = proto_tree_add_item(tree, hf_ieee80211_antsel_vs, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12621 }
12622 else
12623 {
12624 cap_item = proto_tree_add_item(tree, hf_ieee80211_antsel, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12625 }
12626 cap_tree = proto_item_add_subtree(cap_item, ett_antsel_tree);
12627 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b0, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12628 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b1, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12629 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b2, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12630 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b3, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12631 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b4, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12632 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b5, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12633 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b6, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12634 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b7, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12635
12636 offset += 1;
12637
12638 return offset;
12639}
12640
12641static int
12642dissect_ht_info_ie_1_0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
12643 guint32 tag_len, proto_item *ti_len)
12644{
12645 proto_item *cap_item;
12646 proto_tree *cap_tree;
12647
12648 if (tag_len != 22) {
12649 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
12650 "Tag length %u wrong, must be = 22", tag_len);
12651 return offset;
12652 }
12653
12654 if (wlan_ignore_draft_ht)
12655 return offset;
12656
12657 /* 1 HT Control Channel */
12658 proto_tree_add_item(tree, hf_ieee80211_hta_cc, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12659 offset += 1;
12660
12661 /* 1 byte HT additional capabilities */
12662 cap_item = proto_tree_add_item(tree, hf_ieee80211_hta_cap, tvb, offset, 1,
12663 ENC_LITTLE_ENDIAN0x80000000);
12664 cap_tree = proto_item_add_subtree(cap_item, ett_hta_cap_tree);
12665
12666 proto_tree_add_item(cap_tree, hf_ieee80211_hta_ext_chan_offset, tvb, offset, 1,
12667 ENC_LITTLE_ENDIAN0x80000000);
12668 proto_tree_add_item(cap_tree, hf_ieee80211_hta_rec_tx_width, tvb, offset, 1,
12669 ENC_LITTLE_ENDIAN0x80000000);
12670 proto_tree_add_item(cap_tree, hf_ieee80211_hta_rifs_mode, tvb, offset, 1,
12671 ENC_LITTLE_ENDIAN0x80000000);
12672 proto_tree_add_item(cap_tree, hf_ieee80211_hta_controlled_access, tvb, offset, 1,
12673 ENC_LITTLE_ENDIAN0x80000000);
12674 proto_tree_add_item(cap_tree, hf_ieee80211_hta_service_interval, tvb, offset, 1,
12675 ENC_LITTLE_ENDIAN0x80000000);
12676 offset += 1;
12677
12678 /* 2 byte HT additional capabilities */
12679 cap_item = proto_tree_add_item(tree, hf_ieee80211_hta_cap, tvb, offset, 2,
12680 ENC_LITTLE_ENDIAN0x80000000);
12681 cap_tree = proto_item_add_subtree(cap_item, ett_hta_cap1_tree);
12682
12683 proto_tree_add_item(cap_tree, hf_ieee80211_hta_operating_mode, tvb, offset, 2,
12684 ENC_LITTLE_ENDIAN0x80000000);
12685 proto_tree_add_item(cap_tree, hf_ieee80211_hta_non_gf_devices, tvb, offset, 2,
12686 ENC_LITTLE_ENDIAN0x80000000);
12687
12688 offset += 2;
12689
12690 /* 2 byte HT additional capabilities */
12691 cap_item = proto_tree_add_item(tree, hf_ieee80211_hta_cap, tvb, offset, 2,
12692 ENC_LITTLE_ENDIAN0x80000000);
12693 cap_tree = proto_item_add_subtree(cap_item, ett_hta_cap2_tree);
12694
12695 proto_tree_add_item(cap_tree, hf_ieee80211_hta_basic_stbc_mcs, tvb, offset, 2,
12696 ENC_LITTLE_ENDIAN0x80000000);
12697 proto_tree_add_item(cap_tree, hf_ieee80211_hta_dual_stbc_protection, tvb, offset, 2,
12698 ENC_LITTLE_ENDIAN0x80000000);
12699 proto_tree_add_item(cap_tree, hf_ieee80211_hta_secondary_beacon, tvb, offset, 2,
12700 ENC_LITTLE_ENDIAN0x80000000);
12701 proto_tree_add_item(cap_tree, hf_ieee80211_hta_lsig_txop_protection, tvb, offset, 2,
12702 ENC_LITTLE_ENDIAN0x80000000);
12703 proto_tree_add_item(cap_tree, hf_ieee80211_hta_pco_active, tvb, offset, 2,
12704 ENC_LITTLE_ENDIAN0x80000000);
12705 proto_tree_add_item(cap_tree, hf_ieee80211_hta_pco_phase, tvb, offset, 2,
12706 ENC_LITTLE_ENDIAN0x80000000);
12707 offset += 2;
12708
12709 /* 16 byte Supported MCS set */
12710 offset = dissect_mcs_set(tree, tvb, offset, FALSE(0), TRUE(!(0)));
12711
12712 return offset;
12713}
12714
12715/* 802.11n-D1.10 and 802.11n-D2.0, 7.1.3.5a */
12716
12717/*
12718 * 8.2.4.1.10 "Order field" says:
12719 *
12720 * The Order field is 1 bit in length. It is used for two purposes:
12721 *
12722 * -- It is set to 1 in a non-QoS data frame transmitted by a non-QoS
12723 * STA to indicate that the frame contains an MSDU, or fragment
12724 * thereof, that is being transferred using the StrictlyOrdered
12725 * service class.
12726 *
12727 * -- It is set to 1 in a QoS data or management frame transmitted
12728 * with a value of HT_GF or HT_MF for the FORMAT parameter of the
12729 * TXVECTOR to indicate that the frame contains an HT Control field.
12730 *
12731 * 802.11ac changes the second of those clauses to say "HT_GF, HT_MF,
12732 * or VHT", indicates that bit B0 of the field is 0 for HT and 1 for
12733 * VHT (stealing a reserved bit from the Link Adaptation Control field),
12734 * and that everything except for "AC Constraint" and "RDG/More Cowbell^W
12735 * PPDU" is different for the VHT version.
12736 *
12737 * I read the second clause of 8.2.4.1.10 "Order field", as modified by
12738 * 802.11ac, as meaning that, for QoS data and management frames, the
12739 * Order field will *only* be set to 1 for HT or VHT frames, and therefore
12740 * that we do *not* have to determine, from radio metadata, whether the
12741 * frame was transmitted as an HT or VHT frame.
12742 *
12743 * (See bug 11351, in which a frame with an HT Control field, with a
12744 * radiotap header, lacks the MCS or VHT fields in the radiotap header,
12745 * so Wireshark has no clue that it's an HT or VHT field, and misdissected
12746 * the packet. Omnipeek, which also appeared to have no clue that it was
12747 * an HT or VHT field - it called it an 802.11b frame - *did* dissect the
12748 * HT Control field.)
12749 */
12750
12751static void
12752dissect_ht_control(proto_tree *tree, tvbuff_t *tvb, int offset)
12753{
12754 proto_item *ti;
12755 proto_tree *htc_tree, *lac_subtree, *mfb_subtree;
12756 guint32 htc;
12757
12758 htc = tvb_get_letohl(tvb, offset);
12759
12760 ti = proto_tree_add_item(tree, hf_ieee80211_htc, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12761 htc_tree = proto_item_add_subtree(ti, ett_htc_tree);
12762
12763 /* Check the HT vs. VHT bit. */
12764 proto_tree_add_item(htc_tree, hf_ieee80211_htc_vht, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12765 if (htc & HTC_VHT0x00000001) {
12766 /* VHT */
12767 proto_tree_add_item(htc_tree, hf_ieee80211_htc_mrq, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12768 if (!(htc & HTC_UNSOLICITED_MFB0x20000000)) {
12769 if (htc & HTC_MRQ0x00000004) {
12770 proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12771 } else {
12772 proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi_stbc_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12773 }
12774 proto_tree_add_item(htc_tree, hf_ieee80211_htc_mfsi, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12775 } else {
12776 if (!HTC_NO_FEEDBACK_PRESENT(HTC_MFB(htc))((((((htc) >> 9) & 0x7FFF)) & 0x7F) == 0x7F)) {
12777 proto_tree_add_item(htc_tree, hf_ieee80211_htc_compressed_msi, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12778 proto_tree_add_item(htc_tree, hf_ieee80211_htc_ppdu_stbc_encoded, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12779 } else {
12780 proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi_stbc_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12781 }
12782 proto_tree_add_item(htc_tree, hf_ieee80211_htc_gid_l, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12783 }
12784 ti = proto_tree_add_item(htc_tree, hf_ieee80211_htc_mfb, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12785 mfb_subtree = proto_item_add_subtree(ti, ett_mfb_subtree);
12786 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_num_sts, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12787 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_vht_mcs, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12788 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_bw, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12789 /* This should be converted to dB by adding 22 */
12790 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_snr, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12791 if (!HTC_NO_FEEDBACK_PRESENT(HTC_MFB(htc))((((((htc) >> 9) & 0x7FFF)) & 0x7F) == 0x7F)) {
12792 proto_tree_add_item(htc_tree, hf_ieee80211_htc_gid_h, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12793 proto_tree_add_item(htc_tree, hf_ieee80211_htc_coding_type, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12794 proto_tree_add_item(htc_tree, hf_ieee80211_htc_fb_tx_type, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12795 } else {
12796 proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved3, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12797 }
12798 proto_tree_add_item(htc_tree, hf_ieee80211_htc_unsolicited_mfb, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12799 } else {
12800 /* Start: Link Adaptation Control */
12801 ti = proto_tree_add_item(htc_tree, hf_ieee80211_htc_lac, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12802 lac_subtree = proto_item_add_subtree(ti, ett_lac_subtree);
12803 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_trq, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12804
12805 if (HTC_IS_ASELI(htc)((((htc) >> 2) & 0xF) == 0xE)) {
12806 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_aseli, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12807 } else {
12808 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_mrq, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12809 if (HTC_LAC_MAI_MRQ(htc)(((((htc) >> 2) & 0xF)) & 0x1)) {
12810 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_msi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12811 } else {
12812 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12813 }
12814 }
12815
12816 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mfsi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12817
12818 if (HTC_IS_ASELI(htc)((((htc) >> 2) & 0xF) == 0xE)) {
12819 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_asel_command, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12820 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_asel_data, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12821 } else {
12822 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mfb, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12823 }
12824 /* End: Link Adaptation Control */
12825
12826 proto_tree_add_item(htc_tree, hf_ieee80211_htc_cal_pos, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12827 proto_tree_add_item(htc_tree, hf_ieee80211_htc_cal_seq, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12828 proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved1, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12829 proto_tree_add_item(htc_tree, hf_ieee80211_htc_csi_steering, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12830
12831 proto_tree_add_item(htc_tree, hf_ieee80211_htc_ndp_announcement, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12832 proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved2, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12833 }
12834 proto_tree_add_item(htc_tree, hf_ieee80211_htc_ac_constraint, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12835 proto_tree_add_item(htc_tree, hf_ieee80211_htc_rdg_more_ppdu, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12836
12837 /* offset += 2; */
12838}
12839
12840#define IEEE80211_COMMON_OPT_BROKEN_FC0x00000001 0x00000001
12841#define IEEE80211_COMMON_OPT_IS_CENTRINO0x00000002 0x00000002
12842#define IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004 0x00000004
12843
12844static void
12845dissect_frame_control(proto_tree *tree, tvbuff_t *tvb, guint32 option_flags,
12846 guint32 offset, packet_info *pinfo)
12847{
12848 guint16 fcf, flags, frame_type_subtype;
12849 proto_tree *fc_tree, *flag_tree;
12850 proto_item *fc_item, *flag_item, *hidden_item, *ti;
12851
12852 fcf = FETCH_FCF(offset)((option_flags & 0x00000001) ? (((guint16) ( (guint16) ((
guint16) (tvb_get_letohs(tvb, offset)) >> 8) | (guint16
) ((guint16) (tvb_get_letohs(tvb, offset)) << 8)))) : tvb_get_letohs
(tvb, offset))
;
12853
12854 flags = FCF_FLAGS(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))
;
12855 frame_type_subtype = COMPOSE_FRAME_TYPE(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf & 0x0C)<< 6) + (
(fcf) & 0xF0) + (((fcf) & 0xF00) >> 8)) : (((fcf
& 0x0C)<< 2)+(((fcf) & 0xF0) >> 4)))
;
12856
12857 /* Swap offset... */
12858 if(option_flags & IEEE80211_COMMON_OPT_BROKEN_FC0x00000001)
12859 {
12860 offset += 1;
12861 }
12862
12863 proto_tree_add_uint(tree, hf_ieee80211_fc_frame_type_subtype, tvb, offset, 1, frame_type_subtype);
12864
12865 fc_item = proto_tree_add_item(tree, hf_ieee80211_fc_field, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
12866
12867 fc_tree = proto_item_add_subtree(fc_item, ett_fc_tree);
12868
12869 proto_tree_add_item(fc_tree, hf_ieee80211_fc_proto_version, tvb, offset, 1, ENC_NA0x00000000);
12870 proto_tree_add_item(fc_tree, hf_ieee80211_fc_frame_type, tvb, offset, 1, ENC_NA0x00000000);
12871 proto_tree_add_item(fc_tree, hf_ieee80211_fc_frame_subtype, tvb, offset, 1, ENC_NA0x00000000);
12872 /* Changing control frame extension for extension frames */
12873 if(IS_FRAME_EXTENSION(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? 1 : 0)
== 1) {
12874 proto_tree_add_uint(fc_tree, hf_ieee80211_fc_frame_extension, tvb, offset, 1, FCF_FRAME_EXTENSION(fcf)(((fcf) & 0xF00) >> 8));
12875 }
12876 offset += 1;
12877
12878 /* Reswap offset...*/
12879 if(option_flags & IEEE80211_COMMON_OPT_BROKEN_FC0x00000001)
12880 {
12881 offset -= 1;
12882 proto_item_append_text(fc_item, "(Swapped)");
12883 }
12884
12885 /* Flags */
12886 flag_item = proto_tree_add_item(fc_tree, hf_ieee80211_fc_flags, tvb, offset, 1, ENC_NA0x00000000);
12887 flag_tree = proto_item_add_subtree(flag_item, ett_proto_flags);
12888 /* Changing control frame flags for extension frames */
12889 if(IS_FRAME_EXTENSION(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? 1 : 0)
== 0) {
12890 proto_tree_add_item(flag_tree, hf_ieee80211_fc_data_ds, tvb, offset, 1, ENC_NA0x00000000);
12891 hidden_item = proto_tree_add_item(flag_tree, hf_ieee80211_fc_to_ds, tvb, offset, 1, ENC_NA0x00000000);
12892 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
12893 hidden_item = proto_tree_add_item(flag_tree, hf_ieee80211_fc_from_ds, tvb, offset, 1, ENC_NA0x00000000);
12894 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
12895 proto_tree_add_item(flag_tree, hf_ieee80211_fc_more_frag, tvb, offset, 1, ENC_NA0x00000000);
12896 ti = proto_tree_add_item(flag_tree, hf_ieee80211_fc_retry, tvb, offset, 1, ENC_NA0x00000000);
12897 if( IS_RETRY(flags)((flags) & 0x08) )
12898 {
12899 expert_add_info(pinfo, ti, &ei_ieee80211_fc_retry);
12900 }
12901 }
12902 proto_tree_add_item(flag_tree, hf_ieee80211_fc_pwr_mgt, tvb, offset, 1, ENC_NA0x00000000);
12903 proto_tree_add_item(flag_tree, hf_ieee80211_fc_more_data, tvb, offset, 1, ENC_NA0x00000000);
12904 /* Changing control frame flags for extension frames */
12905 if(IS_FRAME_EXTENSION(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? 1 : 0)
== 0) {
12906 proto_tree_add_item(flag_tree, hf_ieee80211_fc_protected, tvb, offset, 1, ENC_NA0x00000000);
12907 }
12908 proto_tree_add_item(flag_tree, hf_ieee80211_fc_order, tvb, offset, 1, ENC_NA0x00000000);
12909}
12910
12911static void
12912dissect_durid(proto_tree *hdr_tree, tvbuff_t *tvb, guint16 fts, gint offset)
12913{
12914 guint16 durid = tvb_get_letohs(tvb, offset);
12915
12916 if (durid < 0x8000) {
12917 proto_tree_add_uint_format_value(hdr_tree, hf_ieee80211_did_duration, tvb,
12918 offset, 2, durid, "%u microseconds", durid);
12919 } else if (((durid & 0xC000) == 0xC000) &&
12920 ((durid & 0x3FFF) > 0) && ((durid & 0x3FFF) <= 2007) &&
12921 (fts == CTRL_PS_POLL0x1A)) {
12922 proto_tree_add_item(hdr_tree, hf_ieee80211_assoc_id, tvb, offset, 2,
12923 ENC_LITTLE_ENDIAN0x80000000);
12924 } else if (durid == 0x8000) {
12925 proto_tree_add_uint_format(hdr_tree, hf_ieee80211_did_duration, tvb,
12926 offset, 2, durid, "Duration/ID: %u", durid);
12927 } else {
12928 proto_tree_add_uint_format(hdr_tree, hf_ieee80211_did_duration, tvb,
12929 offset, 2, durid, "Duration/ID: %u (reserved)", durid & 0x3FFF);
12930 }
12931}
12932
12933
12934static void
12935dissect_vendor_ie_ht(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
12936 guint offset, proto_item *item, proto_item *ti_len, gint tag_len)
12937{
12938
12939 guint8 type;
12940
12941 proto_tree_add_item(tree, hf_ieee80211_ht_pren_type, tvb, offset, 1, ENC_NA0x00000000);
12942 type = tvb_get_guint8(tvb, offset);
12943 offset += 1;
12944 tag_len -= 1;
12945
12946
12947 switch(type){
12948 case 51:
12949 dissect_ht_capability_ie(tvb, pinfo, tree, offset, tag_len, ti_len, TRUE(!(0)));
12950 proto_item_append_text(item, ": HT Capabilities (802.11n D1.10)");
12951 break;
12952
12953 case 52:
12954 dissect_ht_info_ie_1_0(tvb, pinfo, tree, offset, tag_len, ti_len);
12955 proto_item_append_text(item, ": HT Additional Capabilities (802.11n D1.00)");
12956 break;
12957
12958 default:
12959 proto_tree_add_item(tree, hf_ieee80211_ht_pren_unknown, tvb, offset, tag_len, ENC_NA0x00000000);
12960 break;
12961 }
12962
12963}
12964
12965static guint
12966dissect_interworking(packet_info *pinfo, proto_tree *tree, proto_item *item,
12967 tvbuff_t *tvb, int offset)
12968{
12969 guint8 len;
12970
12971 offset += 1;
12972 len = tvb_get_guint8(tvb, offset);
12973 offset += 1;
12974
12975 if ((tvb_reported_length_remaining(tvb, offset) < len) || (len == 0)) {
12976 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
12977 "Truncated Interworking element");
12978 return offset;
12979 }
12980
12981 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_access_network_type,
12982 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12983 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_internet,
12984 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12985 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_asra,
12986 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12987 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_esr,
12988 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12989 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_uesa,
12990 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12991 offset += 1;
12992
12993 if ((len == (1 + 2)) || (len == (1 + 2 + 6))) {
12994 dissect_venue_info(tree, tvb, offset);
12995 offset += 2;
12996 }
12997
12998 if ((len == (1 + 6)) || (len == (1 + 2 + 6))) {
12999 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_hessid,
13000 tvb, offset, 6, ENC_NA0x00000000);
13001 offset += 6;
13002 }
13003
13004 if ((len != 1) && (len != (1 + 2)) && (len != (1 + 6)) && (len != (1 + 2 + 6))) {
13005 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
13006 "Invalid Interworking element length");
13007 }
13008
13009 return offset;
13010}
13011
13012static guint
13013dissect_qos_map_set(packet_info *pinfo, proto_tree *tree, proto_item *item,
13014 tvbuff_t *tvb, int offset)
13015{
13016 guint8 len, left;
13017 guint8 val, val2;
13018 int i;
13019 proto_item *dscp_item;
13020 proto_tree *dscp_tree;
13021
13022 offset++;
13023 len = tvb_get_guint8(tvb, offset);
13024 offset++;
13025
13026 if (tvb_reported_length_remaining(tvb, offset) < len || len < 16 || len & 1) {
13027 expert_add_info_format(pinfo, item, &ei_ieee80211_bad_length,
13028 "Truncated QoS Map Set element");
13029 return 2 + len;
13030 }
13031
13032 left = len - 16;
13033 while (left >= 2) {
13034 dscp_item = proto_tree_add_item(tree, hf_ieee80211_tag_qos_map_set_dscp_exc,
13035 tvb, offset, 2, ENC_NA0x00000000);
13036 dscp_tree = proto_item_add_subtree(dscp_item, ett_qos_map_set_exception);
13037
13038 item = proto_tree_add_item(dscp_tree,
13039 hf_ieee80211_tag_qos_map_set_dscp_exc_val,
13040 tvb, offset, 1, ENC_NA0x00000000);
13041 val = tvb_get_guint8(tvb, offset);
13042 if (val > 63 && val != 255) {
13043 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
13044 "Invalid DSCP Value");
13045 }
13046 offset++;
13047
13048 item = proto_tree_add_item(dscp_tree,
13049 hf_ieee80211_tag_qos_map_set_dscp_exc_up,
13050 tvb, offset, 1, ENC_NA0x00000000);
13051 val2 = tvb_get_guint8(tvb, offset);
13052 if (val2 > 7) {
13053 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
13054 "Invalid User Priority");
13055 }
13056 offset++;
13057
13058 proto_item_append_text(dscp_item, " (0x%02x: UP %u)", val, val2);
13059
13060 left -= 2;
13061 }
13062
13063 for (i = 0; i < 8; i++) {
13064 dscp_item = proto_tree_add_item(tree, hf_ieee80211_tag_qos_map_set_range,
13065 tvb, offset, 2, ENC_NA0x00000000);
13066 dscp_tree = proto_item_add_subtree(dscp_item, ett_qos_map_set_exception);
13067
13068 item = proto_tree_add_item(dscp_tree, hf_ieee80211_tag_qos_map_set_low,
13069 tvb, offset, 1, ENC_NA0x00000000);
13070 val = tvb_get_guint8(tvb, offset);
13071 if (val > 63 && val != 255) {
13072 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
13073 "Invalid DSCP Value");
13074 }
13075 offset++;
13076
13077 item = proto_tree_add_item(dscp_tree, hf_ieee80211_tag_qos_map_set_high,
13078 tvb, offset, 1, ENC_NA0x00000000);
13079 val2 = tvb_get_guint8(tvb, offset);
13080 if ((val2 > 63 && val2 != 255) || val2 < val ||
13081 (val == 255 && val2 != 255) || (val != 255 && val2 == 255)) {
13082 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
13083 "Invalid DSCP Value");
13084 }
13085 offset++;
13086
13087 if (val == 255 && val2 == 255) {
13088 proto_item_append_text(dscp_item, " (UP %u not in use)", i);
13089 } else {
13090 proto_item_append_text(dscp_item, " (0x%02x-0x%02x: UP %u)",
13091 val, val2, i);
13092 }
13093 }
13094
13095 return 2 + len;
13096}
13097
13098static guint
13099dissect_roaming_consortium(packet_info *pinfo, proto_tree *tree,
13100 proto_item *item, tvbuff_t *tvb, int offset)
13101{
13102 guint8 len, oi_lens, oi1_len, oi2_len;
13103 int end;
13104
13105 offset += 1;
13106 len = tvb_get_guint8(tvb, offset);
13107 offset += 1;
13108 end = offset + len;
13109
13110 if ((tvb_reported_length_remaining(tvb, offset) < len) || (len < 2)) {
13111 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
13112 "Truncated Roaming Consortium element");
13113 return 2 + len;
13114 }
13115
13116 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_num_anqp_oi,
13117 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13118 offset += 1;
13119
13120 oi_lens = tvb_get_guint8(tvb, offset);
13121 oi1_len = oi_lens & 0x0f;
13122 oi2_len = (oi_lens & 0xf0) >> 4;
13123 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi1_len,
13124 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13125 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi2_len,
13126 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13127 offset += 1;
13128
13129 if (offset + oi1_len > end) {
13130 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
13131 "Truncated Roaming Consortium element");
13132 return 2 + len;
13133 }
13134
13135 item = proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi1,
13136 tvb, offset, oi1_len, ENC_NA0x00000000);
13137 add_manuf(item, tvb, offset);
13138 offset += oi1_len;
13139
13140 if (offset + oi2_len > end) {
13141 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
13142 "Truncated Roaming Consortium element");
13143 return 2 + len;
13144 }
13145
13146 if (oi2_len > 0) {
13147 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi2,
13148 tvb, offset, oi2_len, ENC_NA0x00000000);
13149 offset += oi2_len;
13150 }
13151
13152 if (end > offset) {
13153 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi3,
13154 tvb, offset, end - offset, ENC_NA0x00000000);
13155 }
13156
13157 return 2 + len;
13158}
13159
13160
13161/* ************************************************************************* */
13162/* Dissect and add tagged (optional) fields to proto tree */
13163/* ************************************************************************* */
13164
13165static int beacon_padding = 0; /* beacon padding bug */
13166
13167static int
13168ieee80211_tag_ssid(packet_info *pinfo, proto_tree *tree,
13169 proto_item *ti, proto_item *ti_len,
13170 guint32 tag_len, tvbuff_t *tvb, int offset)
13171{
13172 /* 7.3.2.1 SSID element (0) */
13173 gchar *ssid; /* The SSID may consist of arbitrary bytes */
13174 gint ssid_len = tag_len;
13175
13176 if (beacon_padding != 0) /* padding bug */
13177 return offset;
13178
13179 if (ssid_len > MAX_SSID_LEN32) {
13180 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13181 "SSID length (%u) greater than maximum (%u)",
13182 ssid_len, MAX_SSID_LEN32);
13183 ssid_len = MAX_SSID_LEN32;
13184 }
13185
13186 /*
13187 * XXX - the 802.11 specs aren't particularly clear on how the SSID
13188 * is to be interpreted.
13189 *
13190 * IEEE Std 802.11-1999, section 7.3.2.2 "Service Set Identity (SSID)
13191 * element" says just
13192 *
13193 * The length of the SSID information field is between 0 and 32
13194 * octets. A 0 length information field indicates the broadcast SSID.
13195 *
13196 * with no indication that those octets encode a string.
13197 *
13198 * IEEE Std 802.11-2012, section 8.4.2.2 "SSID element", says that *but*
13199 * says after it
13200 *
13201 * When the UTF-8 SSID subfield of the Extended Capabilities element
13202 * is equal to 1 in the frame that includes the SSID element, the
13203 * SSID is interpreted using UTF-8 encoding.
13204 *
13205 * NOTE -- This is true for Beacon and Probe Response frames when the
13206 * MLME-START.request primitive was issued with the SSIDEncoding
13207 * parameter equal to UTF-8.
13208 *
13209 * and the SSIDEncoding parameter can either be UNSPECIFIED or UTF-8.
13210 *
13211 * So I *guess* that means that, if the UTF-8 SSID subfield isn't
13212 * equal to 1, the SSID is, in theory, just a bunch of octets, but
13213 * in practice, *probably* ASCII as that's the typical convention,
13214 * and, if it is equal to 1, it's a UTF-8 string. (Of course, a
13215 * host can put anything there it wants to, so we shouldn't just
13216 * assume that it's *valid* ASCII or *valid* UTF-8.)
13217 *
13218 * So we really should extract it as an array of ssid_len bytes,
13219 * pass those bytes to AirPDcapSetLastSSID(), and:
13220 *
13221 * If the UTF-8 SSID subfield isn't set to 1, put the SSID in
13222 * as an ENC_ASCII string;
13223 *
13224 * If the UTF-8 SSID subfield is set to 1, put it in as an
13225 * ENC_UTF_8 string;
13226 *
13227 * and rely on the libwireshark core code to somehow deal with
13228 * non-ASCII characters or invalid UTF-8 sequences or valid-but-
13229 * not-all-printable ASCII or UTF-8 strings in the protocol tree
13230 * display. I'm not sure we can currently rely on it to handle
13231 * invalid UTF-8 or non-printable characters in UTF-8 strings,
13232 * however, so we just treat it as ASCII for now.
13233 *
13234 * We also need a better way of getting the display format of a
13235 * string value, so we can do something other than run it through
13236 * format_text(), which won't handle UTF-8.
13237 */
13238 ssid = tvb_get_string_enc(wmem_packet_scope(), tvb, offset + 2, ssid_len, ENC_ASCII0x00000000);
13239 if (ssid_len == (gint)tag_len) {
13240 AirPDcapSetLastSSID(&airpdcap_ctx, (CHAR *) ssid, ssid_len);
13241 }
13242 proto_tree_add_item(tree, hf_ieee80211_tag_ssid, tvb, offset + 2, tag_len,
13243 ENC_ASCII0x00000000|ENC_NA0x00000000);
13244
13245 if (ssid_len > 0) {
13246 proto_item_append_text(ti, ": %s", format_text(ssid, ssid_len));
13247
13248 col_append_fstr(pinfo->cinfo, COL_INFO, ", SSID=%s", format_text(ssid, ssid_len));
13249
13250 /* Wlan Stats */
13251 memcpy(wlan_stats.ssid, ssid, MIN(ssid_len, MAX_SSID_LEN)(((ssid_len) < (32)) ? (ssid_len) : (32)));
13252 wlan_stats.ssid_len = ssid_len;
13253 } else {
13254 proto_item_append_text(ti, ": Broadcast");
13255
13256 col_append_str(pinfo->cinfo, COL_INFO, ", SSID=Broadcast");
13257 }
13258
13259 beacon_padding += 1; /* padding bug */
13260
13261 return offset + 2 + tag_len;
13262}
13263
13264static int
13265dissect_neighbor_report(tvbuff_t *tvb, packet_info *pinfo,
13266 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len,
13267 int tag_end, proto_item *ti _U___attribute__((unused)))
13268{
13269
13270 guint8 sub_tag_id;
13271 guint32 sub_tag_length;
13272 proto_item *parent_item;
13273 proto_tree *bssid_info_subtree, *bssid_info_cap_subtree, *sub_tag_tree;
13274 tvbuff_t *sub_tag_tvb = NULL((void*)0);
13275
13276 if (tag_len < 13) {
13277 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13278 "Neighbor Report length %u wrong, must be > 13", tag_len);
13279 return offset;
13280 }
13281
13282 /* tag_offset = offset; */
13283
13284 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_bssid, tvb, offset, 6, ENC_NA0x00000000);
13285 offset += 6;
13286
13287 /*** Begin: BSSID Information ***/
13288
13289 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_bssid_info, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13290 bssid_info_subtree = proto_item_add_subtree(parent_item, ett_tag_neighbor_report_bssid_info_tree);
13291
13292 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_reachability, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13293 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_security, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13294 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_key_scope, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13295 parent_item = proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13296 bssid_info_cap_subtree = proto_item_add_subtree(parent_item, ett_tag_neighbor_report_bssid_info_capability_tree);
13297 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13298 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13299 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13300 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13301 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_dback, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13302 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_iback, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13303 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13304 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13305 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13306 offset += 4;
13307
13308 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_ope_class, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13309 offset += 1;
13310
13311 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_channel_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13312 offset += 1;
13313
13314 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_phy_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13315 offset += 1;
13316
13317 /* The Optional Subelements field format contains zero or more subelements */
13318 if (tag_len == 13){ /* tag_len == 13 => no Subelements */
13319 return offset;
13320 }
13321
13322 while (offset < tag_end)
13323 {
13324
13325 sub_tag_id = tvb_get_guint8(tvb, offset);
13326 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_subelement_id, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13327 offset += 1;
13328
13329 sub_tag_length = tvb_get_guint8(tvb, offset);
13330 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_subelement_length, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13331 offset += 1;
13332 sub_tag_tvb = tvb_new_subset_length(tvb, offset, sub_tag_length);
13333
13334 switch (sub_tag_id) {
13335 case NR_SUB_ID_TSF_INFO1:
13336 /* TODO */
13337 break;
13338 case NR_SUB_ID_MEASUREMENT_PILOT_INFO66:
13339 /* TODO */
13340 break;
13341 case NR_SUB_ID_HT_CAPABILITIES45:
13342 sub_tag_tree = proto_tree_add_subtree(tree, tvb, offset, sub_tag_length,
13343 ett_tag_neighbor_report_sub_tag_tree, NULL((void*)0), "HT Capabilities");
13344 dissect_ht_capability_ie(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_length, ti_len, FALSE(0));
13345 break;
13346 case NR_SUB_ID_HT_OPERATION61:
13347 sub_tag_tree = proto_tree_add_subtree(tree, tvb, offset, sub_tag_length,
13348 ett_tag_neighbor_report_sub_tag_tree, NULL((void*)0), "HT Information");
13349 dissect_ht_info_ie_1_1(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_length, ti_len);
13350 break;
13351 case NR_SUB_ID_SEC_CHANNEL_OFFSET62:
13352 sub_tag_tree = proto_tree_add_subtree(tree, tvb, offset, sub_tag_length,
13353 ett_tag_neighbor_report_sub_tag_tree, NULL((void*)0), "Secondary Channel Offset");
13354 dissect_secondary_channel_offset_ie(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_length, ti_len);
13355 break;
13356 case NR_SUB_ID_VENDOR_SPECIFIC221:
13357 default:
13358 break;
13359 }
13360
13361 offset += sub_tag_length;
13362}
13363
13364 return offset;
13365}
13366
13367static int
13368ieee80211_tag_supp_rates(packet_info *pinfo, proto_tree *tree,
13369 proto_item *ti, proto_item *ti_len,
13370 guint32 tag_len, tvbuff_t *tvb,
13371 int offset, int tag_end)
13372{
13373 /* 7.3.2.2 Supported Rates element (1) */
13374 if (tag_len < 1) {
13375 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13376 "Tag length %u too short, must be greater than 0",
13377 tag_len);
13378 return offset;
13379 }
13380
13381 offset += 2;
13382
13383 while (offset < tag_end) {
13384 proto_tree_add_item(tree, hf_ieee80211_tag_supp_rates, tvb, offset, 1,
13385 ENC_LITTLE_ENDIAN0x80000000);
13386 proto_item_append_text(ti, " %s,",
13387 val_to_str_ext_const(tvb_get_guint8(tvb, offset),
13388 &ieee80211_supported_rates_vals_ext,
13389 "Unknown Rate"));
13390 offset += 1;
13391 }
13392
13393 proto_item_append_text(ti, " [Mbit/sec]");
13394
13395 return offset;
13396}
13397
13398static int
13399ieee80211_tag_fh_parameter(packet_info *pinfo, proto_tree *tree,
13400 proto_item *ti_len, guint32 tag_len,
13401 tvbuff_t *tvb, int offset)
13402{
13403 /* 7.3.2.3 FH Parameter Set element (2) */
13404 if (tag_len < 5) {
13405 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13406 "Tag length %u too short, must be >= 5", tag_len);
13407 return offset;
13408 }
13409
13410 offset += 2;
13411
13412 proto_tree_add_item(tree, hf_ieee80211_tag_fh_dwell_time,
13413 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13414 offset += 2;
13415
13416 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_set,
13417 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13418 offset += 1;
13419
13420 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_pattern,
13421 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13422 offset += 1;
13423
13424 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_index,
13425 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13426 offset += 1;
13427
13428 return offset;
13429}
13430
13431static int
13432ieee80211_tag_ds_parameter(packet_info *pinfo, proto_tree *tree,
13433 proto_item *ti, proto_item *ti_len,
13434 guint32 tag_len, tvbuff_t *tvb,
13435 int offset)
13436{
13437 /* 7.3.2.4 DS Parameter Set element (3) */
13438 if (tag_len != 1) {
13439 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13440 "Tag length %u wrong, must be = 1", tag_len);
13441 return offset;
13442 }
13443
13444 offset += 2;
13445
13446 proto_tree_add_item(tree, hf_ieee80211_tag_ds_param_channel,
13447 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13448
13449 proto_item_append_text(ti, ": Current Channel: %u",
13450 tvb_get_guint8(tvb, offset));
13451
13452 wlan_stats.channel = tvb_get_guint8(tvb, offset);
13453 offset += 1;
13454
13455 return offset;
13456}
13457
13458static int
13459ieee80211_tag_cf_parameter(packet_info *pinfo, proto_tree *tree,
13460 proto_item *ti, proto_item *ti_len,
13461 guint32 tag_len, tvbuff_t *tvb,
13462 int offset)
13463{
13464 /* 7.3.2.5 CF Parameter Set element (4) */
13465 if (tag_len != 6) {
13466 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13467 "Tag length %u wrong, must be = 6", tag_len);
13468 return offset;
13469 }
13470
13471 offset += 2;
13472
13473 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_count,
13474 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13475 proto_item_append_text(ti, ": CFP count %u", tvb_get_guint8(tvb, offset));
13476 offset += 1;
13477
13478 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_period,
13479 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13480 proto_item_append_text(ti, ": CFP Period %u", tvb_get_guint8(tvb, offset));
13481 offset += 1;
13482
13483 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_max_duration,
13484 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13485 proto_item_append_text(ti, ": CFP Max Duration %u",
13486 tvb_get_letohs(tvb, offset));
13487 offset += 2;
13488
13489 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_dur_remaining,
13490 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13491 proto_item_append_text(ti, ": CFP Dur Remaining %u",
13492 tvb_get_letohs(tvb, offset));
13493 offset += 1;
13494
13495 return offset;
13496}
13497
13498static int
13499ieee80211_tag_tim(packet_info *pinfo, proto_tree *tree,
13500 proto_item *ti, proto_item *ti_len,
13501 guint32 tag_len, tvbuff_t *tvb, int offset)
13502{
13503 proto_tree *bmapctl_tree;
13504 proto_item *bmapctl_item;
13505 guint aid, pvb_len, n1, i, j, byte;
13506
13507 /* 802.11-2012: 8.4.2.7 TIM element (5) */
13508 if (tag_len < 4) {
13509 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13510 "Tag length %u too short, must be >= 4", tag_len);
13511 return offset;
13512 }
13513
13514 offset += 2;
13515
13516 proto_tree_add_item(tree, hf_ieee80211_tim_dtim_count,
13517 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13518 proto_item_append_text(ti, ": DTIM %u of", tvb_get_guint8(tvb, offset));
13519 offset += 1;
13520
13521 proto_tree_add_item(tree, hf_ieee80211_tim_dtim_period,
13522 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13523 proto_item_append_text(ti, " %u bitmap", tvb_get_guint8(tvb, offset + 1));
13524 offset += 1;
13525
13526 bmapctl_item = proto_tree_add_item(tree, hf_ieee80211_tim_bmapctl,
13527 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13528 bmapctl_tree = proto_item_add_subtree(bmapctl_item, ett_tag_bmapctl_tree);
13529 proto_tree_add_item(bmapctl_tree, hf_ieee80211_tim_bmapctl_mcast,
13530 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13531 proto_tree_add_item(bmapctl_tree, hf_ieee80211_tim_bmapctl_offset,
13532 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13533 pvb_len = tag_len - 3;
13534 n1 = tvb_get_guint8(tvb, offset) & 0xFE;
13535 offset += 1;
13536
13537 proto_tree_add_item(tree, hf_ieee80211_tim_partial_virtual_bitmap,
13538 tvb, offset, pvb_len, ENC_NA0x00000000);
13539 /* FIXME: Handles dot11MgmtOptionMultiBSSIDActivated = false only */
13540 for (i = 0; i < pvb_len; i++) {
13541 byte = tvb_get_guint8(tvb, offset + i);
13542 for (j = 0; j < 8; j++) {
13543 if (byte & (1 << j)) {
13544 aid = 8*n1 + 8*i + j;
13545 proto_tree_add_uint_format_value(tree, hf_ieee80211_tim_aid, tvb, offset + i, 1, aid, "%d", aid);
13546 }
13547 }
13548 }
13549 offset += pvb_len;
13550
13551 return offset;
13552}
13553
13554static int
13555ieee80211_tag_ibss_parameter(packet_info *pinfo, proto_tree *tree,
13556 proto_item *ti, proto_item *ti_len,
13557 guint32 tag_len, tvbuff_t *tvb,
13558 int offset)
13559{
13560 /* 7.3.2.7 IBSS Parameter Set element (6) */
13561
13562 if (tag_len != 2) {
13563 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13564 "Tag length %u wrong, must be = 2", tag_len);
13565 return offset;
13566 }
13567
13568 offset += 2;
13569
13570 proto_tree_add_item(tree, hf_ieee80211_tag_ibss_atim_window,
13571 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13572 proto_item_append_text(ti, ": ATIM window 0x%x",
13573 tvb_get_letohs(tvb, offset));
13574 offset += 2;
13575
13576 return offset;
13577}
13578
13579static const value_string environment_vals[] = {
13580 { 0x20, "Any" },
13581 { 0x4f, "Outdoor" },
13582 { 0x49, "Indoor" },
13583 { 0, NULL((void*)0) }
13584};
13585
13586static int
13587ieee80211_tag_country_info(packet_info *pinfo, proto_tree *tree,
13588 proto_item *ti, proto_item *ti_len,
13589 guint32 tag_len, tvbuff_t *tvb,
13590 int offset, int tag_end)
13591{
13592 /* 7.3.2.9 Country information element (7) */
13593 proto_tree *sub_tree;
13594 proto_item *sub_item;
13595 const guint8* country_code;
13596
13597 if (tag_len < 6) {
13598 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13599 "Tag length %u too short, must be >= 6", tag_len);
13600 return offset;
13601 }
13602
13603 offset += 2;
13604
13605 proto_tree_add_item_ret_string(tree, hf_ieee80211_tag_country_info_code,
13606 tvb, offset, 2, ENC_ASCII0x00000000|ENC_NA0x00000000, wmem_packet_scope(), &country_code);
13607 proto_item_append_text(ti, ": Country Code %s", country_code);
13608 offset += 2;
13609
13610 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_env,
13611 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13612 proto_item_append_text(ti, ", Environment %s",
13613 val_to_str(tvb_get_guint8(tvb, offset),
13614 environment_vals, "Unknown (0x%02x)"));
13615 offset += 1;
13616
13617 while (offset < tag_end) {
13618 /* Padding ? */
13619 if ((tag_end - offset) < 3) {
13620 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_pad,
13621 tvb, offset, 1, ENC_NA0x00000000);
13622 offset += 1;
13623 continue;
13624 }
13625 if (tvb_get_guint8(tvb, offset) <= 200) { /* 802.11d */
13626 sub_item = proto_tree_add_item(tree, hf_ieee80211_tag_country_info_fnm,
13627 tvb, offset, 3, ENC_NA0x00000000);
13628 sub_tree = proto_item_add_subtree(sub_item, ett_tag_country_fnm_tree);
13629
13630 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_fcn,
13631 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13632 proto_item_append_text(sub_item, ": First Channel Number: %d",
13633 tvb_get_guint8(tvb, offset));
13634 offset += 1;
13635 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_nc,
13636 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13637 proto_item_append_text(sub_item, ", Number of Channels: %d",
13638 tvb_get_guint8(tvb, offset));
13639 offset += 1;
13640 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_mtpl,
13641 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13642 proto_item_append_text(sub_item,
13643 ", Maximum Transmit Power Level: %d dBm",
13644 tvb_get_guint8(tvb, offset));
13645 offset += 1;
13646 } else { /* 802.11j */
13647 sub_item = proto_tree_add_item(tree, hf_ieee80211_tag_country_info_rrc,
13648 tvb, offset, 3, ENC_NA0x00000000);
13649 sub_tree = proto_item_add_subtree(sub_item, ett_tag_country_rcc_tree);
13650
13651 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_oei,
13652 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13653 proto_item_append_text(sub_item,
13654 ": Operating Extension Identifier: %d",
13655 tvb_get_guint8(tvb, offset));
13656 offset += 1;
13657 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_oc,
13658 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13659 proto_item_append_text(sub_item, ", Operating Class: %d",
13660 tvb_get_guint8(tvb, offset));
13661 offset += 1;
13662 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_cc,
13663 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13664 proto_item_append_text(sub_item, ", Coverage Class: %d",
13665 tvb_get_guint8(tvb, offset));
13666 offset += 1;
13667 }
13668 }
13669
13670 return offset;
13671}
13672
13673static int
13674ieee80211_tag_fh_hopping_parameter(packet_info *pinfo,
13675 proto_tree *tree,
13676 proto_item *ti,
13677 proto_item *ti_len,
13678 guint32 tag_len, tvbuff_t *tvb,
13679 int offset)
13680{
13681 /* 7.3.2.10 Hopping Pattern Parameters information element (8) */
13682 if (tag_len < 2) {
13683 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13684 "Tag length %u too short, must be >= 2", tag_len);
13685 return offset;
13686 }
13687
13688 offset += 2;
13689
13690 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_parameter_prime_radix,
13691 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13692 proto_item_append_text(ti, ": Prime Radix: %u", tvb_get_guint8(tvb, offset));
13693 offset += 1;
13694
13695 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_parameter_nb_channels,
13696 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13697 proto_item_append_text(ti, ", Number of Channels: %u",
13698 tvb_get_guint8(tvb, offset));
13699 offset += 1;
13700
13701 return offset;
13702}
13703
13704static int
13705ieee80211_tag_fh_hopping_table(packet_info *pinfo, proto_tree *tree,
13706 proto_item *ti_len,
13707 guint32 tag_len, tvbuff_t *tvb,
13708 int offset, int tag_end)
13709{
13710 /* 7.3.2.11 Hopping Pattern Table information element (9) */
13711 if (tag_len < 4) {
13712 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13713 "Tag length %u too short, must be >= 4", tag_len);
13714 return offset;
13715 }
13716
13717 offset += 2;
13718
13719 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_flag,
13720 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13721 offset += 1;
13722
13723 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_number_of_sets,
13724 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13725 offset += 1;
13726
13727 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_modulus,
13728 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13729 offset += 1;
13730
13731 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_offset,
13732 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13733 offset += 1;
13734
13735 while (offset < tag_end) {
13736 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_random_table,
13737 tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
13738 offset += 2;
13739 }
13740
13741 return offset;
13742}
13743
13744int
13745add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, int ftype,
13746 const guint8 *valid_element_ids, guint valid_element_ids_count)
13747{
13748 guint32 oui;
13749 tvbuff_t *tag_tvb;
13750 const guint8 *tag_data_ptr;
13751 guint32 tag_no, tag_len;
13752 int n, ret;
13753 char print_buff[SHORT_STR256];
13754 proto_tree *orig_tree = tree;
13755 proto_item *ti = NULL((void*)0);
13756 proto_item *ti_len, *ti_tag;
13757 int tag_end;
13758 gboolean isDMG;
13759
13760 isDMG = GPOINTER_TO_INT(p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_DMG_KEY))((gint) (glong) (p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan
, 1)))
;
13761
13762 tag_no = tvb_get_guint8(tvb, offset);
13763 tag_len = tvb_get_guint8(tvb, offset + 1);
13764 tag_end = offset + 2 + tag_len;
13765
13766 if (tree) {
13767 ti = proto_tree_add_item(orig_tree, hf_ieee80211_tag, tvb, offset, 2 + tag_len , ENC_NA0x00000000);
13768 proto_item_append_text(ti, ": %s", val_to_str_ext(tag_no, &tag_num_vals_ext, "Reserved (%d)"));
13769
13770 tree = proto_item_add_subtree(ti, ett_80211_mgt_ie);
13771
13772 }
13773
13774 ti_tag = proto_tree_add_item(tree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13775 ti_len = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
13776 if (tag_len > (guint)tvb_reported_length_remaining(tvb, offset)) {
13777 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13778 "Tag Length is longer than remaining payload");
13779 }
13780
13781 /* If the list of valid elements is restricted, require an Element ID to be
13782 * present in that list. Otherwise stop decoding the value to prevent possible
13783 * infinite recursions due to unexpected elements. */
13784 if (valid_element_ids_count) {
13785 gboolean valid_tag_no;
13786 guint i;
13787
13788 for (i = 0; i < valid_element_ids_count; i++) {
13789 valid_tag_no = valid_element_ids[i] == tag_no;
13790 if (valid_tag_no)
13791 break;
13792 }
13793 if (!valid_tag_no) {
13794 expert_add_info_format(pinfo, ti_tag, &ei_ieee80211_tag_number,
13795 "Unexpected Element ID %d", tag_no);
13796 goto end_of_tag;
13797 }
13798 }
13799
13800 switch (tag_no) {
13801 case TAG_SSID0:
13802 offset += ieee80211_tag_ssid(pinfo, tree, ti, ti_len, tag_len, tvb,
13803 offset);
13804 break;
13805 case TAG_SUPP_RATES1:
13806 offset += ieee80211_tag_supp_rates(pinfo, tree, ti, ti_len, tag_len, tvb,
13807 offset, tag_end);
13808 break;
13809 case TAG_FH_PARAMETER2:
13810 offset += ieee80211_tag_fh_parameter(pinfo, tree, ti_len, tag_len, tvb,
13811 offset);
13812 break;
13813 case TAG_DS_PARAMETER3:
13814 offset += ieee80211_tag_ds_parameter(pinfo, tree, ti, ti_len, tag_len, tvb,
13815 offset);
13816 break;
13817 case TAG_CF_PARAMETER4:
13818 offset += ieee80211_tag_cf_parameter(pinfo, tree, ti, ti_len, tag_len, tvb,
13819 offset);
13820 break;
13821 case TAG_TIM5:
13822 offset += ieee80211_tag_tim(pinfo, tree, ti, ti_len, tag_len, tvb, offset);
13823 break;
13824 case TAG_IBSS_PARAMETER6:
13825 offset += ieee80211_tag_ibss_parameter(pinfo, tree, ti, ti_len, tag_len,
13826 tvb, offset);
13827 break;
13828 case TAG_COUNTRY_INFO7:
13829 offset += ieee80211_tag_country_info(pinfo, tree, ti, ti_len, tag_len, tvb,
13830 offset, tag_end);
13831 break;
13832 case TAG_FH_HOPPING_PARAMETER8:
13833 offset += ieee80211_tag_fh_hopping_parameter(pinfo, tree, ti, ti_len,
13834 tag_len, tvb, offset);
13835 break;
13836 case TAG_FH_HOPPING_TABLE9:
13837 offset += ieee80211_tag_fh_hopping_table(pinfo, tree, ti_len, tag_len,
13838 tvb, offset, tag_end);
13839 break;
13840
13841 case TAG_REQUEST10: /* 7.3.2.12 Request information element (10) */
13842 while (offset < tag_end)
13843 {
13844 proto_tree_add_item(tree, hf_ieee80211_tag_request, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13845 offset += 1;
13846 }
13847 break;
13848
13849 case TAG_QBSS_LOAD11: /* 7.3.2.28 BSS Load element (11) */
13850 /* 8.4.2.30 in 802.11-2012 */
13851 if ((tag_len < 4) || (tag_len > 5))
13852 {
13853 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4 or 5", tag_len);
13854 break;
13855 }
13856
13857 if (tag_len == 4)
13858 {
13859 /* QBSS Version 1 */
13860 proto_item_append_text(ti, " Cisco QBSS Version 1 - non CCA");
13861
13862 /* Extract Values */
13863 proto_tree_add_uint(tree, hf_ieee80211_qbss_version, tvb, offset + 2, tag_len, 1);
13864 proto_tree_add_item(tree, hf_ieee80211_qbss_scount, tvb, offset + 2, 2, ENC_LITTLE_ENDIAN0x80000000);
13865 proto_tree_add_item(tree, hf_ieee80211_qbss_cu, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN0x80000000);
13866 proto_tree_add_item(tree, hf_ieee80211_qbss_adc, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN0x80000000);
13867 }
13868 else if (tag_len == 5)
13869
13870 {
13871 proto_item *base_item;
13872
13873 /* QBSS Version 2 */
13874 proto_item_append_text(ti, " 802.11e CCA Version");
13875
13876 /* Extract Values */
13877 proto_tree_add_uint(tree, hf_ieee80211_qbss_version, tvb, offset + 2, tag_len, 2);
13878 proto_tree_add_item(tree, hf_ieee80211_qbss_scount, tvb, offset + 2, 2, ENC_LITTLE_ENDIAN0x80000000);
13879 base_item = proto_tree_add_item(tree, hf_ieee80211_qbss_cu, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN0x80000000);
13880 proto_item_append_text(base_item, " (%d%%)", 100*tvb_get_guint8(tvb, offset + 4)/255);
13881 base_item = proto_tree_add_item(tree, hf_ieee80211_qbss_adc, tvb, offset + 5, 2, ENC_LITTLE_ENDIAN0x80000000);
13882 proto_item_append_text(base_item, " (%d us/s)", tvb_get_letohs(tvb, offset + 5)*32);
13883 }
13884 break;
13885
13886#if 0 /* ToDo */
13887 case TAG_EDCA_PARAM_SET12: /* 8.4.2.31 in 802-11-2012 */
13888 offset += add_ff_qos_info_ap(tree, tvb, pinfo, offset);
13889 offset += 1; /* reserved */
13890 offset += 4; /* AC_BE */
13891 offset += 4; /* AC_BK */
13892 offset += 4; /* AC_VI */
13893 offset += 4; /* AC_VO */
13894 break;
13895#endif
13896
13897 case TAG_TSPEC13: /* TSPEC element (13) */
13898 if (isDMG == FALSE(0) && tag_len != 55)
13899 {
13900 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 55", tag_len);
13901 break;
13902 }
13903 if (isDMG == TRUE(!(0)) && tag_len != 57)
13904 {
13905 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 57", tag_len);
13906 break;
13907 }
13908 offset += 2;
13909
13910 add_ff_qos_ts_info(tree, tvb, pinfo, offset);
13911 offset += 3;
13912
13913 proto_tree_add_item(tree, hf_ieee80211_tspec_nor_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13914 offset += 2;
13915
13916 proto_tree_add_item(tree, hf_ieee80211_tspec_max_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13917 offset += 2;
13918
13919 proto_tree_add_item(tree, hf_ieee80211_tspec_min_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13920 offset += 4;
13921
13922 proto_tree_add_item(tree, hf_ieee80211_tspec_max_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13923 offset += 4;
13924
13925 proto_tree_add_item(tree, hf_ieee80211_tspec_inact_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13926 offset += 4;
13927
13928 proto_tree_add_item(tree, hf_ieee80211_tspec_susp_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13929 offset += 4;
13930
13931 proto_tree_add_item(tree, hf_ieee80211_tspec_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13932 offset += 4;
13933
13934 proto_tree_add_item(tree, hf_ieee80211_tspec_min_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13935 offset += 4;
13936
13937 proto_tree_add_item(tree, hf_ieee80211_tspec_mean_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13938 offset += 4;
13939
13940 proto_tree_add_item(tree, hf_ieee80211_tspec_peak_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13941 offset += 4;
13942
13943 proto_tree_add_item(tree, hf_ieee80211_tspec_burst_size, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13944 offset += 4;
13945
13946 proto_tree_add_item(tree, hf_ieee80211_tspec_delay_bound, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13947 offset += 4;
13948
13949 proto_tree_add_item(tree, hf_ieee80211_tspec_min_phy, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13950 offset += 4;
13951
13952 proto_tree_add_item(tree, hf_ieee80211_tspec_surplus, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13953 offset += 2;
13954
13955 proto_tree_add_item(tree, hf_ieee80211_tspec_medium, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13956 offset += 2;
13957
13958 if(isDMG == TRUE(!(0))) {
13959 proto_tree_add_item(tree, hf_ieee80211_tspec_dmg, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13960 offset +=2;
13961 }
13962
13963 break;
13964
13965 case TAG_TCLAS14: /* 7.3.2.31 TCLAS element (14) */
13966 if (tag_len < 6)
13967 {
13968 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 6", tag_len);
13969 break;
13970 }
13971 {
13972 guint8 type;
13973 guint8 version;
13974 proto_item *class_mask;
13975 proto_tree *mask_tree;
13976
13977 offset += 2;
13978 proto_tree_add_item(tree, hf_ieee80211_tclas_up, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13979 offset += 1;
13980
13981 type = tvb_get_guint8(tvb, offset);
13982 proto_tree_add_item(tree, hf_ieee80211_tclas_class_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13983 offset += 1;
13984
13985 class_mask = proto_tree_add_item(tree, hf_ieee80211_tclas_class_mask,
13986 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13987 offset += 1;
13988
13989 switch (type)
13990 {
13991 case 0:
13992 offset--;
13993 mask_tree = proto_item_add_subtree(class_mask,
13994 ett_tag_tclas_mask_tree);
13995 proto_tree_add_item(mask_tree,
13996 hf_ieee80211_tclas_class_mask0_src_addr,
13997 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13998 proto_tree_add_item(mask_tree,
13999 hf_ieee80211_tclas_class_mask0_dst_addr,
14000 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14001 proto_tree_add_item(mask_tree,
14002 hf_ieee80211_tclas_class_mask0_type,
14003 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14004 offset++;
14005
14006 proto_tree_add_item(tree, hf_ieee80211_tclas_src_mac_addr, tvb, offset, 6, ENC_NA0x00000000);
14007 offset += 6;
14008
14009 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_mac_addr, tvb, offset, 6, ENC_NA0x00000000);
14010 offset += 6;
14011
14012 proto_tree_add_item(tree, hf_ieee80211_tclas_ether_type, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14013 offset += 2;
14014 break;
14015
14016 case 1:
14017 version = tvb_get_guint8(tvb, offset);
14018 offset--;
14019
14020 mask_tree = proto_item_add_subtree(class_mask,
14021 ett_tag_tclas_mask_tree);
14022 proto_tree_add_item(mask_tree,
14023 hf_ieee80211_tclas_class_mask1_ver,
14024 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14025 proto_tree_add_item(mask_tree,
14026 hf_ieee80211_tclas_class_mask1_src_ip,
14027 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14028 proto_tree_add_item(mask_tree,
14029 hf_ieee80211_tclas_class_mask1_dst_ip,
14030 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14031 proto_tree_add_item(mask_tree,
14032 hf_ieee80211_tclas_class_mask1_src_port,
14033 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14034 proto_tree_add_item(mask_tree,
14035 hf_ieee80211_tclas_class_mask1_dst_port,
14036 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14037 if (version == 4) {
14038 proto_tree_add_item(mask_tree,
14039 hf_ieee80211_tclas_class_mask1_ipv4_dscp,
14040 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14041 proto_tree_add_item(mask_tree,
14042 hf_ieee80211_tclas_class_mask1_ipv4_proto,
14043 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14044 } else {
14045 proto_tree_add_item(mask_tree,
14046 hf_ieee80211_tclas_class_mask1_ipv6_flow,
14047 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14048 }
14049 offset += 1;
14050
14051 proto_tree_add_item(tree, hf_ieee80211_tclas_version, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14052 offset += 1;
14053 if (version == 4)
14054 {
14055 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv4_src, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
14056 offset += 4;
14057 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv4_dst, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
14058 offset += 4;
14059 proto_tree_add_item(tree, hf_ieee80211_tclas_src_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
14060 offset += 2;
14061 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
14062 offset += 2;
14063 proto_tree_add_item(tree, hf_ieee80211_tclas_dscp, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14064 offset += 1;
14065 proto_tree_add_item(tree, hf_ieee80211_tclas_protocol, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14066 offset += 1;
14067 }
14068 else if (version == 6)
14069 {
14070 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv6_src, tvb, offset, 16, ENC_NA0x00000000);
14071 offset += 16;
14072 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv6_dst, tvb, offset, 16, ENC_NA0x00000000);
14073 offset += 16;
14074 proto_tree_add_item(tree, hf_ieee80211_tclas_src_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
14075 offset += 2;
14076 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
14077 offset += 2;
14078 proto_tree_add_item(tree, hf_ieee80211_tclas_flow, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
14079 offset += 3;
14080 }
14081 break;
14082
14083 case 2:
14084 offset--;
14085 mask_tree = proto_item_add_subtree(class_mask,
14086 ett_tag_tclas_mask_tree);
14087 proto_tree_add_item(mask_tree,
14088 hf_ieee80211_tclas_class_mask2_tci,
14089 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14090 offset++;
14091
14092 proto_tree_add_item(tree, hf_ieee80211_tclas_tag_type, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14093 offset += 2;
14094 break;
14095
14096 default:
14097 break;
14098 }
14099 }
14100 break;
14101
14102 case TAG_SCHEDULE15: /* 7.3.2.34 Schedule element (15) */
14103 if (tag_len != 14)
14104 {
14105 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 14", tag_len);
14106 break;
14107 }
14108 offset += 2;
14109
14110 add_ff_schedule_info(tree, tvb, pinfo, offset);
14111 offset += 2;
14112
14113 proto_tree_add_item(tree, hf_ieee80211_sched_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
14114 offset += 4;
14115
14116 proto_tree_add_item(tree, hf_ieee80211_sched_srv_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
14117 offset += 4;
14118
14119 proto_tree_add_item(tree, hf_ieee80211_sched_spec_int, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14120 offset += 2;
14121 break;
14122
14123 case TAG_CHALLENGE_TEXT16: /* 7.3.2.8 Challenge Text element (16) */
14124 offset += 2;
14125 proto_tree_add_item(tree, hf_ieee80211_tag_challenge_text, tvb, offset, tag_len, ENC_NA0x00000000);
14126 break;
14127
14128 case TAG_POWER_CONSTRAINT32: /* 7.3.2.15 Power Constraint element (32) */
14129 {
14130 if (tag_len != 1)
14131 {
14132 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
14133 break;
14134 }
14135 offset += 2;
14136
14137 proto_tree_add_item(tree, hf_ieee80211_tag_power_constraint_local, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14138 proto_item_append_text(ti, ": %d", tvb_get_guint8(tvb, offset));
14139 offset += 1;
14140
14141 break;
14142 }
14143
14144 case TAG_POWER_CAPABILITY33: /* 7.3.2.16 Power Capability element (33) */
14145 {
14146 if (tag_len != 2)
14147 {
14148 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 2", tag_len);
14149 break;
14150 }
14151 offset += 2;
14152
14153 proto_tree_add_item(tree, hf_ieee80211_tag_power_capability_min, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14154 proto_item_append_text(ti, " Min: %d", (gint8)tvb_get_guint8(tvb, offset));
14155 offset += 1;
14156
14157 proto_tree_add_item(tree, hf_ieee80211_tag_power_capability_max, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14158 proto_item_append_text(ti, ", Max: %d", (gint8)tvb_get_guint8(tvb, offset));
14159 offset += 1;
14160 break;
14161 }
14162
14163 case TAG_TPC_REQUEST34: /* 7.3.2.18 TPC Request element (34) */
14164 {
14165 if (tag_len != 0)
14166 {
14167 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 0", tag_len);
14168 break;
14169 }
14170 offset += 2;
14171
14172 /* No Data */
14173 break;
14174 }
14175
14176 case TAG_TPC_REPORT35: /* 7.3.2.18 TPC Report element (35) */
14177 {
14178 if (tag_len != 2)
14179 {
14180 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 2", tag_len);
14181 break;
14182 }
14183 offset += 2;
14184
14185 proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_trsmt_pow, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14186 proto_item_append_text(ti, " Transmit Power: %d", tvb_get_guint8(tvb, offset));
14187 offset += 1;
14188
14189 proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_link_mrg, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14190 proto_item_append_text(ti, ", Link Margin: %d", tvb_get_guint8(tvb, offset));
14191 offset += 1;
14192
14193 break;
14194 }
14195
14196 case TAG_SUPPORTED_CHANNELS36: /* 7.3.2.19 Supported Channels element (36) */
14197 {
14198 proto_item *chan_item;
14199 proto_tree *chan_tree;
14200 guint i = 1;
14201
14202 offset += 2;
14203 if (tag_len % 2 == 1) {
14204 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length %u must be even", tag_len);
14205 break;
14206 }
14207 while (offset < tag_end)
14208 {
14209 chan_item = proto_tree_add_item(tree, hf_ieee80211_tag_supported_channels, tvb, offset, 2, ENC_NA0x00000000);
14210 proto_item_append_text(chan_item, " #%d", i);
14211 i += 1;
14212
14213 chan_tree = proto_item_add_subtree(chan_item , ett_tag_supported_channels);
14214
14215 proto_tree_add_item(chan_tree, hf_ieee80211_tag_supported_channels_first, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14216 proto_item_append_text(chan_item, " First: %d", tvb_get_guint8(tvb, offset));
14217 offset += 1;
14218
14219 proto_tree_add_item(chan_tree, hf_ieee80211_tag_supported_channels_range, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14220 proto_item_append_text(chan_item, ", Range: %d ", tvb_get_guint8(tvb, offset));
14221 offset += 1;
14222
14223 }
14224 break;
14225 }
14226 case TAG_CHANNEL_SWITCH_ANN37: /* 7.3.2.20 Channel Switch Announcement element (37) */
14227 {
14228 if (tag_len != 3)
14229 {
14230 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 3", tag_len);
14231 break;
14232 }
14233 offset += 2;
14234
14235 proto_tree_add_item(tree, hf_ieee80211_csa_channel_switch_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14236 proto_item_append_text(ti, " Mode: %d", tvb_get_guint8(tvb, offset));
14237 offset += 1;
14238
14239 proto_tree_add_item(tree, hf_ieee80211_csa_new_channel_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14240 proto_item_append_text(ti, ", Number: %d ", tvb_get_guint8(tvb, offset));
14241 offset += 1;
14242
14243 proto_tree_add_item(tree, hf_ieee80211_csa_channel_switch_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14244 proto_item_append_text(ti, ", Count: %d ", tvb_get_guint8(tvb, offset));
14245 offset += 1;
14246
14247 break;
14248 }
14249
14250 case TAG_MEASURE_REQ38: /* 7.3.2.21 Measurement Request element (38) with update from 802.11k-2008 */
14251 if (tag_len < 3)
14252 {
14253 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 3", tag_len);
14254 break;
14255 }
14256 {
14257 guint8 request_type;
14258 proto_item *parent_item;
14259 proto_tree *sub_tree;
14260
14261 offset += 2;
14262
14263 proto_tree_add_item(tree, hf_ieee80211_tag_measure_request_token, tvb, offset, 1, ENC_NA0x00000000);
14264 offset += 1;
14265
14266 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_request_mode, tvb, offset, 1, ENC_NA0x00000000);
14267 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_request_mode_tree);
14268 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_parallel, tvb, offset, 1, ENC_NA0x00000000);
14269 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_enable, tvb, offset, 1, ENC_NA0x00000000);
14270 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_request, tvb, offset, 1, ENC_NA0x00000000);
14271 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_report, tvb, offset, 1, ENC_NA0x00000000);
14272 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_duration_mandatory, tvb, offset, 1, ENC_NA0x00000000);
14273 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_reserved, tvb, offset, 1, ENC_NA0x00000000);
14274 offset += 1;
14275
14276
14277 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_request_type, tvb, offset, 1, ENC_NA0x00000000);
14278 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_request_type_tree);
14279 request_type = tvb_get_guint8(tvb, offset);
14280 offset += 1;
14281
14282 switch (request_type) {
14283 case 0: /* Basic Request */
14284 case 1: /* Clear channel assessment (CCA) request */
14285 case 2: /* Receive power indication (RPI) histogram request */
14286 {
14287
14288 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
14289 offset += 1;
14290
14291 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
14292 offset += 8;
14293
14294 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14295 offset += 2;
14296 break;
14297 }
14298 case 3: /* Channel Load Request */
14299 {
14300 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA0x00000000);
14301 offset += 1;
14302
14303 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
14304 offset += 1;
14305
14306 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14307 offset += 2;
14308
14309 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14310 offset += 2;
14311
14312 while (offset < tag_end)
14313 {
14314 guint8 sub_id;
14315 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_load_sub_id, tvb, offset, 1, ENC_NA0x00000000);
14316 sub_id = tvb_get_guint8(tvb, offset);
14317 offset += 1;
14318
14319 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_subelement_length, tvb, offset, 1, ENC_NA0x00000000);
14320 offset += 1;
14321
14322 switch (sub_id) {
14323 case MEASURE_REQ_CHANNEL_LOAD_SUB_REPORTING_INFO1: /* Channel Load Reporting Information (1) */
14324 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_load_sub_reporting_condition, tvb, offset, 1, ENC_NA0x00000000);
14325 offset += 1;
14326 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_load_sub_reporting_ref, tvb, offset, 1, ENC_NA0x00000000);
14327 offset += 1;
14328 break;
14329 default:
14330 /* no default action */
14331 break;
14332 }
14333 }
14334 break;
14335 }
14336 case 4: /* Noise Histogram Request */
14337 {
14338 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA0x00000000);
14339 offset += 1;
14340
14341 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
14342 offset += 1;
14343
14344 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14345 offset += 2;
14346
14347 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14348 offset += 2;
14349
14350 while (offset < tag_end)
14351 {
14352 guint8 sub_id;
14353 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_noise_histogram_sub_id, tvb, offset, 1, ENC_NA0x00000000);
14354 sub_id = tvb_get_guint8(tvb, offset);
14355 offset += 1;
14356
14357 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_subelement_length, tvb, offset, 1, ENC_NA0x00000000);
14358 offset += 1;
14359
14360 switch (sub_id) {
14361 case MEASURE_REQ_NOISE_HISTOGRAM_SUB_REPORTING_INFO1: /* Noise Histogram Reporting Information (1) */
14362 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition, tvb, offset, 1, ENC_NA0x00000000);
14363 offset += 1;
14364 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_anpi_ref, tvb, offset, 1, ENC_NA0x00000000);
14365 offset += 1;
14366 break;
14367 default:
14368 /* no default action */
14369 break;
14370 }
14371 }
14372 break;
14373 }
14374 case 5: /* Beacon Request */
14375 {
14376 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA0x00000000);
14377 offset += 1;
14378
14379 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
14380 offset += 1;
14381
14382 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14383 offset += 2;
14384
14385 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14386 offset += 2;
14387
14388 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_measurement_mode, tvb, offset, 1, ENC_NA0x00000000);
14389 offset += 1;
14390
14391 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_bssid, tvb, offset, 6, ENC_NA0x00000000);
14392 offset += 6;
14393
14394 while (offset < tag_end)
14395 {
14396 guint8 sub_id, sub_length, sub_tag_end;
14397 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_id, tvb, offset, 1, ENC_NA0x00000000);
14398 sub_id = tvb_get_guint8(tvb, offset);
14399 offset += 1;
14400
14401 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_subelement_length, tvb, offset, 1, ENC_NA0x00000000);
14402 sub_length = tvb_get_guint8(tvb, offset);
14403 offset += 1;
14404 sub_tag_end = offset + sub_length;
14405
14406 switch (sub_id) {
14407 case MEASURE_REQ_BEACON_SUB_SSID0: /* SSID (0) */
14408 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_ssid, tvb, offset, sub_length, ENC_ASCII0x00000000|ENC_NA0x00000000);
14409 offset += sub_length;
14410 break;
14411 case MEASURE_REQ_BEACON_SUB_BRI1: /* Beacon Reporting Information (1) */
14412 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14413 offset += 1;
14414 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14415 offset += 1;
14416 break;
14417 case MEASURE_REQ_BEACON_SUB_RD2: /* Reporting Detail (2) */
14418 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14419 offset += 1;
14420 break;
14421 case MEASURE_REQ_BEACON_SUB_REQUEST10: /* Request (10) */
14422 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_request, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14423 offset += 1;
14424 break;
14425 case MEASURE_REQ_BEACON_SUB_APCP51: /* AP Channel Report (51) */
14426 /* TODO */
14427 break;
14428 default:
14429 /* no default action */
14430 break;
14431 }
14432 if (offset < sub_tag_end)
14433 {
14434 proto_item *tix;
14435 tix = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_unknown, tvb, offset, sub_tag_end - offset, ENC_NA0x00000000);
14436 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_request_beacon_unknown);
14437 offset = sub_tag_end;
14438 }
14439 }
14440
14441 break;
14442 }
14443 case 6: /* Frame Request */
14444 {
14445 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA0x00000000);
14446 offset += 1;
14447
14448 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
14449 offset += 1;
14450
14451 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14452 offset += 2;
14453
14454 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14455 offset += 2;
14456
14457 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_frame_request_type, tvb, offset, 1, ENC_NA0x00000000);
14458 offset += 1;
14459
14460 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mac_address, tvb, offset, 6, ENC_NA0x00000000);
14461 offset += 6;
14462
14463 /* TODO Add Optional Subelements */
14464 break;
14465 }
14466 case 7: /* BSTA Statistics Request */
14467 {
14468 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_peer_mac_address, tvb, offset, 6, ENC_NA0x00000000);
14469 offset += 6;
14470
14471 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14472 offset += 2;
14473
14474 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14475 offset += 2;
14476
14477 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_group_id, tvb, offset, 1, ENC_NA0x00000000);
14478 offset += 1;
14479
14480 /* TODO Add Optional Subelements */
14481 break;
14482 }
14483 case 8: /* Location Configuration Indication (LCI) Request */
14484 /* TODO */
14485 case 9: /* Transmit Stream Measurement Request */
14486 /* TODO */
14487 case 10: /* Multicast diagnostics request */
14488 /* TODO */
14489 case 11: /* Location Civic request */
14490 /* TODO */
14491 case 12: /* Location Identifier request */
14492 /* TODO */
14493 case 13: /* Directional channel quality request */
14494 /* TODO */
14495 case 14: /* Directional measurement request */
14496 /* TODO */
14497 case 15: /* Directional statistics request */
14498 /* TODO */
14499 case 255: /* Measurement Pause Request*/
14500 /* TODO */
14501 default: /* unknown */
14502 break;
14503 }
14504 if (offset < tag_end)
14505 {
14506 proto_item *tix;
14507 tix = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_unknown, tvb, offset, tag_end - offset, ENC_NA0x00000000);
14508 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_request_unknown);
14509 }
14510 }
14511
14512 break;
14513 case TAG_MEASURE_REP39: /* 7.3.2.22 Measurement Report element (39) with update from 802.11k-2008 */
14514 if (tag_len < 3)
14515 {
14516 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 3", tag_len);
14517 break;
14518 }
14519 {
14520 proto_item *parent_item;
14521 proto_tree *sub_tree;
14522 guint8 report_type;
14523
14524 offset += 2;
14525 proto_tree_add_item(tree, hf_ieee80211_tag_measure_report_measurement_token, tvb, offset, 1, ENC_NA0x00000000);
14526 offset += 1;
14527
14528 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_report_mode, tvb, offset, 1, ENC_NA0x00000000);
14529 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_report_mode_tree);
14530 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_mode_late, tvb, offset, 1, ENC_NA0x00000000);
14531 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_mode_incapable, tvb, offset, 1, ENC_NA0x00000000);
14532 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_mode_refused, tvb, offset, 1, ENC_NA0x00000000);
14533 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_mode_reserved, tvb, offset, 1, ENC_NA0x00000000);
14534 offset += 1;
14535
14536 report_type = tvb_get_guint8(tvb, offset);
14537 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_report_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14538 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_report_type_tree);
14539 offset += 1;
14540
14541 if (tag_len == 3)
14542 break;
14543 switch (report_type) {
14544 case 0: /* Basic Report */
14545 {
14546 proto_tree *sub_tree_map_field;
14547
14548 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
14549 offset += 1;
14550
14551 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
14552 offset += 8;
14553
14554 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14555 offset += 2;
14556
14557
14558 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_basic_map_field, tvb, offset, 1, ENC_NA0x00000000);
14559 sub_tree_map_field = proto_item_add_subtree(parent_item, ett_tag_measure_report_basic_map_tree);
14560 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_bss, tvb, offset, 1, ENC_NA0x00000000);
14561 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_odfm, tvb, offset, 1, ENC_NA0x00000000);
14562 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_unident_signal, tvb, offset, 1, ENC_NA0x00000000);
14563 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_radar, tvb, offset, 1, ENC_NA0x00000000);
14564 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_unmeasured, tvb, offset, 1, ENC_NA0x00000000);
14565 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_reserved, tvb, offset, 1, ENC_NA0x00000000);
14566 break;
14567 }
14568 case 1: /* Clear channel assessment (CCA) report */
14569 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
14570 offset += 1;
14571
14572 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
14573 offset += 8;
14574
14575 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14576 offset += 2;
14577
14578 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_cca_busy_fraction, tvb, offset, 1, ENC_NA0x00000000);
14579 offset += 1;
14580 break;
14581 case 2: /* Receive power indication (RPI) histogram report */
14582 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
14583 offset += 1;
14584
14585 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
14586 offset += 8;
14587
14588 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14589 offset += 2;
14590
14591 parent_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report, tvb, offset, 8, ENC_NA0x00000000);
14592 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_report_rpi_tree);
14593
14594 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_0, tvb, offset, 1, ENC_NA0x00000000);
14595 offset += 1;
14596
14597 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_1, tvb, offset, 1, ENC_NA0x00000000);
14598 offset += 1;
14599
14600 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_2, tvb, offset, 1, ENC_NA0x00000000);
14601 offset += 1;
14602
14603 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_3, tvb, offset, 1, ENC_NA0x00000000);
14604 offset += 1;
14605
14606 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_4, tvb, offset, 1, ENC_NA0x00000000);
14607 offset += 1;
14608
14609 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_5, tvb, offset, 1, ENC_NA0x00000000);
14610 offset += 1;
14611
14612 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_6, tvb, offset, 1, ENC_NA0x00000000);
14613 offset += 1;
14614
14615 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_7, tvb, offset, 1, ENC_NA0x00000000);
14616 offset += 1;
14617 break;
14618 case 3: /* Channel Load Report */
14619 {
14620 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA0x00000000);
14621 offset += 1;
14622
14623 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
14624 offset += 1;
14625
14626 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
14627 offset += 8;
14628
14629 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14630 offset += 2;
14631
14632 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_load, tvb, offset, 1, ENC_NA0x00000000);
14633 offset += 1;
14634
14635 /* TODO Add Optional Subelements */
14636 break;
14637 }
14638 case 4: /* Noise Histogram Report */
14639 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA0x00000000);
14640 offset += 1;
14641
14642 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
14643 offset += 1;
14644
14645 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
14646 offset += 8;
14647
14648 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14649 offset += 2;
14650
14651 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ant_id, tvb, offset, 1, ENC_NA0x00000000);
14652 offset += 1;
14653
14654 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_anpi, tvb, offset, 1, ENC_NA0x00000000);
14655 offset += 1;
14656
14657 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_0, tvb, offset, 1, ENC_NA0x00000000);
14658 offset += 1;
14659
14660 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_1, tvb, offset, 1, ENC_NA0x00000000);
14661 offset += 1;
14662
14663 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_2, tvb, offset, 1, ENC_NA0x00000000);
14664 offset += 1;
14665
14666 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_3, tvb, offset, 1, ENC_NA0x00000000);
14667 offset += 1;
14668
14669 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_4, tvb, offset, 1, ENC_NA0x00000000);
14670 offset += 1;
14671
14672 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_5, tvb, offset, 1, ENC_NA0x00000000);
14673 offset += 1;
14674
14675 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_6, tvb, offset, 1, ENC_NA0x00000000);
14676 offset += 1;
14677
14678 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_7, tvb, offset, 1, ENC_NA0x00000000);
14679 offset += 1;
14680
14681 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_8, tvb, offset, 1, ENC_NA0x00000000);
14682 offset += 1;
14683
14684 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_9, tvb, offset, 1, ENC_NA0x00000000);
14685 offset += 1;
14686
14687 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_10, tvb, offset, 1, ENC_NA0x00000000);
14688 offset += 1;
14689
14690 /* TODO Add Optional Subelements */
14691 break;
14692 case 5: /* Beacon Report */
14693 {
14694 proto_tree *sub_tree_frame_info;
14695
14696 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA0x00000000);
14697 offset += 1;
14698
14699 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
14700 offset += 1;
14701
14702 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
14703 offset += 8;
14704
14705 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14706 offset += 2;
14707
14708 parent_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_frame_info, tvb, offset, 1, ENC_NA0x00000000);
14709 sub_tree_frame_info = proto_item_add_subtree(parent_item, ett_tag_measure_report_frame_tree);
14710 proto_tree_add_item(sub_tree_frame_info, hf_ieee80211_tag_measure_report_frame_info_phy_type, tvb, offset, 1, ENC_NA0x00000000);
14711 proto_tree_add_item(sub_tree_frame_info, hf_ieee80211_tag_measure_report_frame_info_frame_type, tvb, offset, 1, ENC_NA0x00000000);
14712 offset += 1;
14713
14714 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_rcpi, tvb, offset, 1, ENC_NA0x00000000);
14715 offset += 1;
14716
14717 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_rsni, tvb, offset, 1, ENC_NA0x00000000);
14718 offset += 1;
14719
14720 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_bssid, tvb, offset, 6, ENC_NA0x00000000);
14721 offset += 6;
14722
14723 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ant_id, tvb, offset, 1, ENC_NA0x00000000);
14724 offset += 1;
14725
14726 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_parent_tsf, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
14727 offset += 4;
14728
14729 while (offset < tag_end)
14730 {
14731 guint8 sub_id, sub_length;
14732 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_beacon_sub_id, tvb, offset, 1, ENC_NA0x00000000);
14733 sub_id = tvb_get_guint8(tvb, offset);
14734 offset += 1;
14735
14736 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_subelement_length, tvb, offset, 1, ENC_NA0x00000000);
14737 sub_length = tvb_get_guint8(tvb, offset);
14738 offset += 1;
14739
14740 switch (sub_id) {
14741 case MEASURE_REP_REPORTED_FRAME_BODY1: /* Reported Frame Body (1) */
14742 {
14743 proto_tree *rep_tree;
14744
14745 rep_tree = proto_tree_add_subtree(sub_tree, tvb, offset, sub_length, ett_tag_measure_reported_frame_tree, NULL((void*)0), "Reported Frame Body");
14746
14747 add_ff_timestamp(rep_tree, tvb, pinfo, 0);
14748 add_ff_beacon_interval(rep_tree, tvb, pinfo, 8);
14749 add_ff_cap_info(rep_tree, tvb, pinfo, 10);
14750 offset += 12;
14751
14752 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, rep_tree, sub_length - 12, MGT_PROBE_RESP0x05);
14753 offset += (sub_length - 12);
14754 }
14755 break;
14756 default:
14757 /* no default action */
14758 break;
14759 }
14760 }
14761 break;
14762 }
14763 case 6: /* Frame Report */
14764 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA0x00000000);
14765 offset += 1;
14766
14767 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
14768 offset += 1;
14769
14770 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
14771 offset += 8;
14772
14773 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14774 offset += 2;
14775
14776 /* TODO Add Optional Subelements */
14777 break;
14778 case 7: /* BSTA Statistics Report */
14779 /* TODO */
14780 case 8: /* Location Configuration Information Report element */
14781 /* TODO */
14782 case 9: /* Transmit Stream Measurement Report */
14783 /* TODO */
14784 case 10: /* Multicast diagnostics Report */
14785 /* TODO */
14786 case 11: /* Location Civic Report */
14787 /* TODO */
14788 case 12: /* Location Identifier Report */
14789 /* TODO */
14790 case 13: /* Directional channel quality Report */
14791 /* TODO */
14792 case 14: /* Directional measurement Report */
14793 /* TODO */
14794 case 15: /* Directional statistics Report */
14795 /* TODO */
14796 default: /* unknown */
14797 break;
14798 }
14799 if (offset < tag_end)
14800 {
14801 proto_item *tix;
14802 tix = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_unknown, tvb, offset, tag_end - offset, ENC_NA0x00000000);
14803 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_report_unknown);
14804 }
14805 }
14806 break;
14807
14808 case TAG_QUIET40: /* 7.3.2.23 Quiet element (40) */
14809 if (tag_len != 6)
14810 {
14811 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 6", tag_len);
14812 break;
14813 }
14814 offset += 2;
14815
14816 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_count, tvb, offset, 1, ENC_NA0x00000000);
14817 proto_item_append_text(ti, " Count: %d", tvb_get_guint8(tvb, offset));
14818 offset += 1;
14819
14820 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_period, tvb, offset, 1, ENC_NA0x00000000);
14821 proto_item_append_text(ti, " Period: %d", tvb_get_guint8(tvb, offset));
14822 offset += 1;
14823
14824 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14825 proto_item_append_text(ti, " Duration: %d", tvb_get_letohs(tvb, offset));
14826 offset += 2;
14827
14828 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14829 proto_item_append_text(ti, " Offset: %d", tvb_get_letohs(tvb, offset));
14830 offset += 2;
14831 break;
14832
14833
14834 case TAG_IBSS_DFS41: /* 7.3.2.24 IBSS DFS element (41) */
14835 if (tag_len < 7)
14836 {
14837 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 7", tag_len);
14838 break;
14839 }
14840 {
14841 proto_item *ti_sup_map;
14842 proto_tree *sub_map_tree;
14843 offset += 2;
14844
14845 proto_tree_add_item(tree, hf_ieee80211_tag_dfs_owner, tvb, offset, 6, ENC_NA0x00000000);
14846 proto_item_append_text(ti, " Owner: %s", tvb_ether_to_str(tvb, offset)tvb_address_to_str(wmem_packet_scope(), tvb, AT_ETHER, offset
)
);
14847 offset += 6;
14848
14849 proto_tree_add_item(tree, hf_ieee80211_tag_dfs_recovery_interval, tvb, offset, 1, ENC_NA0x00000000);
14850 offset += 1;
14851
14852 while (offset < tag_end)
14853 {
14854 ti_sup_map = proto_tree_add_item(tree, hf_ieee80211_tag_dfs_channel_map, tvb, offset, 2, ENC_NA0x00000000);
14855 sub_map_tree = proto_item_add_subtree(ti_sup_map, ett_tag_dfs_map_tree);
14856 proto_tree_add_item(sub_map_tree, hf_ieee80211_tag_dfs_channel_number, tvb, offset, 1, ENC_NA0x00000000);
14857 proto_tree_add_item(sub_map_tree, hf_ieee80211_tag_dfs_map, tvb, offset, 1, ENC_NA0x00000000);
14858 offset += 2;
14859 }
14860 break;
14861 }
14862 case TAG_ERP_INFO42: /* 7.3.2.13 ERP Information element (42) */
14863 case TAG_ERP_INFO_OLD47:
14864 if (tag_len != 1)
14865 {
14866 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
14867 break;
14868 }
14869 {
14870 proto_item *ti_erp;
14871 proto_tree *erp_tree;
14872
14873 offset += 2;
14874
14875 ti_erp = proto_tree_add_item(tree, hf_ieee80211_tag_erp_info, tvb, offset, 1, ENC_NA0x00000000);
14876 erp_tree = proto_item_add_subtree(ti_erp, ett_tag_erp_info_tree);
14877 proto_tree_add_item(erp_tree, hf_ieee80211_tag_erp_info_erp_present, tvb, offset, 1, ENC_NA0x00000000);
14878 proto_tree_add_item(erp_tree, hf_ieee80211_tag_erp_info_use_protection, tvb, offset, 1, ENC_NA0x00000000);
14879 proto_tree_add_item(erp_tree, hf_ieee80211_tag_erp_info_barker_preamble_mode, tvb, offset, 1, ENC_NA0x00000000);
14880 proto_tree_add_item(erp_tree, hf_ieee80211_tag_erp_info_reserved, tvb, offset, 1, ENC_NA0x00000000);
14881 offset += 1;
14882 break;
14883 }
14884
14885 case TAG_TS_DELAY43: /* 7.3.2.32 TS Delay element (43) */
14886 if (tag_len != 4)
14887 {
14888 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4", tag_len);
14889 break;
14890 }
14891 offset += 2;
14892
14893 proto_tree_add_item(tree, hf_ieee80211_ts_delay, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
14894 proto_item_append_text(ti, " : %d", tvb_get_ntohl(tvb, offset));
14895 offset += 4;
14896 break;
14897
14898 case TAG_TCLAS_PROCESS44: /* 7.3.2.33 TCLAS Processing element (44) */
14899 if (tag_len != 1)
14900 {
14901 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
14902 break;
14903 }
14904 offset += 2;
14905
14906 proto_tree_add_item(tree, hf_ieee80211_tclas_process, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14907 proto_item_append_text(ti, " : %s", val_to_str(tvb_get_guint8(tvb, offset), ieee80211_tclas_process_flag, "Unknown %d"));
14908 offset += 1;
14909 break;
14910
14911 case TAG_QOS_CAPABILITY46: /* 802.11-2012 8.4.2.37 QoS Capability element (46) */
14912 if (tag_len != 1)
14913 {
14914 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
14915 break;
14916 }
14917 {
14918 offset += 2;
14919 offset = dissect_qos_capability(tree, tvb, pinfo, offset, ftype);
14920 }
14921 break;
14922
14923 case TAG_RSN_IE48: /* 7.3.2.25 RSN information element (48) */
14924 if (tag_len < 18)
14925 {
14926 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 18", tag_len);
14927 break;
14928 }
14929 offset += 2;
14930
14931 offset = dissect_rsn_ie(pinfo, tree, tvb, offset, tag_len);
14932 break;
14933
14934 case TAG_EXT_SUPP_RATES50: /* 7.3.2.14 Extended Supported Rates element (50) */
14935 if (tag_len < 1)
14936 {
14937 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length %u too short, must be greater than 0", tag_len);
14938 break;
14939 }
14940 offset += 2;
14941
14942 while (offset < tag_end)
14943 {
14944 proto_tree_add_item(tree, hf_ieee80211_tag_ext_supp_rates, tvb, offset, 1, ENC_NA0x00000000);
14945 proto_item_append_text(ti, " %s,", val_to_str_ext_const(tvb_get_guint8(tvb, offset), &ieee80211_supported_rates_vals_ext, "Unknown Rate"));
14946 offset += 1;
14947 }
14948 proto_item_append_text(ti, " [Mbit/sec]");
14949 break;
14950
14951 case TAG_EXTENDED_CAPABILITIES127: /* 7.3.2.27 Extended Capabilities information element (127) */
14952 dissect_extended_capabilities_ie(pinfo, tree, ti, ti_len, tag_len, tvb, offset+2, tag_end);
14953 break;
14954
14955 case TAG_CISCO_CCX1_CKIP133: /* Cisco CCX1 CKIP + Device Name (133) */
14956 /* From WCS manual:
14957 * If Aironet IE support is enabled, the access point sends an Aironet
14958 * IE 0x85 (which contains the access point name, load, number of
14959 * associated clients, and so on) in the beacon and probe responses of
14960 * this WLAN, and the controller sends Aironet IEs 0x85 and 0x95
14961 * (which contains the management IP address of the controller and
14962 * the IP address of the access point) in the reassociation response
14963 * if it receives Aironet IE 0x85 in the reassociation request.
14964 */
14965
14966 if (tag_len < 26)
14967 {
14968 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u too short, must be >= 26", tag_len);
14969 break;
14970 }
14971 offset += 2;
14972 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_unknown, tvb, offset, 10, ENC_NA0x00000000);
14973 offset += 10;
14974
14975 /* The Name of the sending device starts at offset 10 and is up to
14976 15 or 16 bytes in length, \0 padded */
14977 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_name, tvb, offset, 16, ENC_ASCII0x00000000|ENC_NA0x00000000);
14978 offset += 16;
14979
14980 /* Total number off associated clients and repeater access points */
14981 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_clients, tvb, offset, 1, ENC_NA0x00000000);
14982 offset += 1;
14983 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_unknown2, tvb, offset, 3, ENC_NA0x00000000);
14984 offset += 3;
14985 break;
14986
14987 case TAG_VHT_CAPABILITY191:
14988 dissect_vht_capability_ie(tvb, pinfo, tree, offset+2, tag_len, ti_len);
14989 break;
14990
14991 case TAG_VHT_OPERATION192:
14992 dissect_vht_operation_ie(tvb, pinfo, tree, offset+2, tag_len, ti_len);
14993 break;
14994
14995 case TAG_EXT_BSS_LOAD193:
14996 dissect_ext_bss_load(tree, tvb, offset+2);
14997 break;
14998
14999 case TAG_WIDE_BW_CHANNEL_SWITCH194:
15000 dissect_wide_bw_channel_switch(tree, tvb, offset+2);
15001 break;
15002
15003 case TAG_VHT_TX_PWR_ENVELOPE195:
15004 dissect_vht_tx_pwr_envelope(tvb, pinfo, tree, offset+2, tag_len, ti_len);
15005 break;
15006
15007 case TAG_CHANNEL_SWITCH_WRAPPER196:
15008 dissect_channel_switch_wrapper(pinfo, tree, tvb, offset + 2, tag_len);
15009 break;
15010
15011 case TAG_OPERATING_MODE_NOTIFICATION199:
15012 dissect_operating_mode_notification(tree, tvb, offset + 2);
15013 break;
15014
15015 case TAG_VENDOR_SPECIFIC_IE221: /* 7.3.2.26 Vendor Specific information element (221) */
15016 case TAG_CISCO_VENDOR_SPECIFIC150: /* This Cisco proprietary IE seems to mimic 221 */
15017 case TAG_SYMBOL_PROPRIETARY173: /* This Symbol proprietary IE seems to mimic 221 */
15018 if (tag_len < 3)
15019 {
15020 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 3", tag_len);
15021 break;
15022 }
15023 {
15024 guint32 tag_vs_len = tag_len;
15025
15026 offset += 2;
15027 oui = tvb_get_ntoh24(tvb, offset);
15028 tag_tvb = tvb_new_subset_length(tvb, offset, tag_len);
15029 proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA0x00000000);
15030 proto_item_append_text(ti, ": %s", uint_get_manuf_name(oui));
15031 offset += 3;
15032 tag_vs_len -= 3;
15033
15034 if (tag_len > 0) {
15035 proto_tree_add_item(ti, hf_ieee80211_tag_vendor_oui_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
15036 }
15037
15038 switch (oui) {
15039 /* 802.11 specific vendor ids */
15040 case OUI_WPAWME0x0050F2:
15041 offset = dissect_vendor_ie_wpawme(tree, tvb, pinfo, offset, tag_vs_len, ftype);
15042 break;
15043 case OUI_RSN0x000FAC:
15044 dissect_vendor_ie_rsn(ti, tree, tvb, offset, tag_vs_len);
15045 break;
15046 case OUI_PRE11N0x00904C:
15047 dissect_vendor_ie_ht(tvb, pinfo, tree, offset, ti, ti_len, tag_vs_len);
15048 break;
15049 case OUI_WFA0x506F9A:
15050 dissect_vendor_ie_wfa(pinfo, ti, tag_tvb);
15051 break;
15052
15053 /* Normal IEEE vendor ids (from oui.h) */
15054 case OUI_CISCOWL0x004096: /* Cisco Wireless (Aironet) */
15055 dissect_vendor_ie_aironet(ti, tree, tvb, offset, tag_vs_len);
15056 break;
15057 case OUI_MARVELL0x005043:
15058 dissect_vendor_ie_marvell(ti, tree, tvb, offset, tag_vs_len);
15059 break;
15060 case OUI_ATHEROS0x00037F:
15061 dissect_vendor_ie_atheros(ti, tree, tvb, offset, tag_vs_len, pinfo, ti_len);
15062 break;
15063 case OUI_ARUBA0x000B86:
15064 dissect_vendor_ie_aruba(ti, tree, tvb, offset, tag_vs_len);
15065 break;
15066 case OUI_NINTENDO0x001F32:
15067 dissect_vendor_ie_nintendo(ti, tree, tvb, offset, tag_vs_len);
15068 break;
15069 case OUI_MIKROTIK0x000C42:
15070 dissect_vendor_ie_mikrotik(ti, tree, tvb, offset, tag_vs_len);
15071 break;
15072 default:
15073 proto_tree_add_item(tree, hf_ieee80211_tag_vendor_data, tvb, offset, tag_vs_len, ENC_NA0x00000000);
15074 break;
15075 }
15076
15077 }
15078 break;
15079
15080 case TAG_MOBILITY_DOMAIN54:
15081 dissect_mobility_domain(tree, tvb, offset + 2, tag_len);
15082 break;
15083
15084 case TAG_FAST_BSS_TRANSITION55:
15085 dissect_fast_bss_transition(tree, tvb, offset + 2, tag_len);
15086 break;
15087
15088 case TAG_MMIE76:
15089 dissect_mmie(tree, tvb, offset + 2, tag_len);
15090 break;
15091
15092 case TAG_SSID_LIST84:
15093 dissect_ssid_list(tree, tvb, offset + 2, tag_len);
15094 break;
15095
15096 case TAG_TIME_ZONE98:
15097 dissect_time_zone(tree, tvb, offset + 2, tag_len);
15098 break;
15099
15100 case TAG_TIMEOUT_INTERVAL56:
15101 dissect_timeout_interval(tree, tvb, pinfo, offset + 2, tag_len);
15102 break;
15103
15104 case TAG_RIC_DATA57: /* RIC Data (RDE) (57) */
15105 /* Assigning the return value will ensure that the IE after RIC is processed
15106 * only once. This gives us a good looking RIC IE :-)
15107 */
15108 tag_len = dissect_ric_data(pinfo, tree, tvb, offset + 2, tag_len, ti, ti_len, ftype);
15109 break;
15110
15111 case TAG_LINK_IDENTIFIER101:
15112 dissect_link_identifier(tree, tvb, offset + 2, tag_len);
15113 break;
15114
15115 case TAG_WAKEUP_SCHEDULE102:
15116 dissect_wakeup_schedule(tree, tvb, offset + 2, tag_len);
15117 break;
15118
15119 case TAG_CHANNEL_SWITCH_TIMING104:
15120 dissect_channel_switch_timing(tree, tvb, offset + 2, tag_len);
15121 break;
15122
15123 case TAG_PTI_CONTROL105:
15124 dissect_pti_control(tree, tvb, offset + 2, tag_len);
15125 break;
15126
15127 case TAG_PU_BUFFER_STATUS106:
15128 dissect_pu_buffer_status(tree, tvb, offset + 2, tag_len);
15129 break;
15130
15131 case TAG_HT_CAPABILITY45:
15132 dissect_ht_capability_ie(tvb, pinfo, tree, offset+2, tag_len, ti_len, FALSE(0));
15133 break;
15134
15135 case TAG_HT_INFO61:
15136 dissect_ht_info_ie_1_1(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
15137 break;
15138
15139 case TAG_SECONDARY_CHANNEL_OFFSET62:
15140 dissect_secondary_channel_offset_ie(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
15141 break;
15142
15143 case TAG_BSS_AVG_ACCESS_DELAY63: /* BSS Average Access Delay element (63) */
15144 dissect_bss_avg_access_delay_ie(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
15145 break;
15146
15147 case TAG_ANTENNA64: /* Antenna element (64) */
15148 dissect_antenna_ie(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
15149 break;
15150
15151 case TAG_RSNI65: /* RSNI element (65) */
15152 dissect_rsni_ie(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
15153 break;
15154
15155 case TAG_BSS_AVB_ADM_CAPACITY67:
15156 dissect_bss_available_admission_capacity_ie(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
15157 break;
15158
15159 case TAG_IE_68_CONFLICT68: /* Conflict: WAPI Vs. IEEE */
15160 if (tag_len >= 20) { /* It Might be WAPI*/
15161 dissect_wapi_param_set(tvb, pinfo, tree, offset + 2, tag_len, ti_len, ti, ftype);
15162 }
15163 else { /* BSS AC Access Delay (68) */
15164 dissect_bss_ac_access_delay_ie(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
15165 }
15166 break;
15167
15168 case TAG_BSS_MAX_IDLE_PERIOD90:
15169 dissect_bss_max_idle_period(tree, tvb, offset + 2);
15170 break;
15171
15172 case TAG_TFS_REQUEST91:
15173 dissect_tfs_request(pinfo, tree, tvb, offset + 2, tag_len, ftype);
15174 break;
15175
15176 case TAG_TFS_RESPONSE92:
15177 dissect_tfs_response(pinfo, tree, tvb, offset + 2, tag_len, ftype);
15178 break;
15179
15180 case TAG_WNM_SLEEP_MODE93:
15181 dissect_wnm_sleep_mode(tree, tvb, offset + 2);
15182 break;
15183
15184 case TAG_TIME_ADV69:
15185 dissect_time_adv(tree, tvb, offset + 2);
15186 break;
15187
15188 case TAG_RM_ENABLED_CAPABILITY70: /* RM Enabled Capabilities (70) */
15189 dissect_rm_enabled_capabilities_ie(pinfo, tree, ti, ti_len, tag_len, tvb, offset+2, tag_end);
15190 break;
15191
15192 case TAG_OVERLAP_BSS_SCAN_PAR74: /* Overlapping BSS Scan Parameters (74) */
15193 dissect_overlap_bss_scan_par(pinfo, tree, tvb, offset + 2, tag_len, ti, ti_len);
15194 break;
15195
15196 case TAG_RIC_DESCRIPTOR75: /* RIC Descriptor (75) */
15197 dissect_ric_descriptor(pinfo, tree, tvb, offset + 2, tag_len, ti, ti_len);
15198 break;
15199
15200 case TAG_MESH_PEERING_MGMT117:
15201 {
15202 guint start = offset + 2;
15203 offset += 2;
15204 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_proto, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15205 offset += 2;
15206 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_local_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15207 offset += 2;
15208 switch (tvb_get_guint8(tvb, 1))
15209 { /* Self-protected action field */
15210 case SELFPROT_ACTION_MESH_PEERING_OPEN1:
15211 break;
15212
15213 case SELFPROT_ACTION_MESH_PEERING_CONFIRM2:
15214 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_peer_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15215 offset += 2;
15216 break;
15217
15218 case SELFPROT_ACTION_MESH_PEERING_CLOSE3:
15219 if ((tag_len == 8) || (tag_len == 24))
15220 {
15221 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_peer_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15222 offset += 2;
15223 }
15224 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
15225 break;
15226
15227 /* unexpected values */
15228 default:
15229 proto_tree_add_expert(tree, pinfo, &ei_ieee80211_mesh_peering_unexpected , tvb, offset, tag_len);
15230 offset += tag_len;
15231 break;
15232 }
15233 if (tag_len - (offset - start) == 16)
15234 {
15235 proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid, tvb, offset, 16, ENC_NA0x00000000);
15236 offset += 16;
15237 }
15238 break;
15239 }
15240
15241 case TAG_MESH_CONFIGURATION113:
15242 {
15243 proto_item *item;
15244 proto_tree *subtree;
15245 offset += 2;
15246 proto_tree_add_item(tree, hf_ieee80211_mesh_config_path_sel_protocol, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
15247 proto_tree_add_item(tree, hf_ieee80211_mesh_config_path_sel_metric, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN0x80000000);
15248 proto_tree_add_item(tree, hf_ieee80211_mesh_config_congestion_control, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
15249 proto_tree_add_item(tree, hf_ieee80211_mesh_config_sync_method, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
15250 proto_tree_add_item(tree, hf_ieee80211_mesh_config_auth_protocol, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN0x80000000);
15251 item = proto_tree_add_item(tree, hf_ieee80211_mesh_config_formation_info, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN0x80000000);
15252 subtree = proto_item_add_subtree(item, ett_mesh_formation_info_tree);
15253 proto_tree_add_item(subtree, hf_ieee80211_mesh_form_info_num_of_peerings, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN0x80000000);
15254 item = proto_tree_add_item(tree, hf_ieee80211_mesh_config_capability, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN0x80000000);
15255 subtree = proto_item_add_subtree(item, ett_mesh_config_cap_tree);
15256 proto_tree_add_item(subtree, hf_ieee80211_mesh_config_cap_accepting, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN0x80000000);
15257 proto_tree_add_item(subtree, hf_ieee80211_mesh_config_cap_mcca_support, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN0x80000000);
15258 proto_tree_add_item(subtree, hf_ieee80211_mesh_config_cap_mcca_enabled, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN0x80000000);
15259 proto_tree_add_item(subtree, hf_ieee80211_mesh_config_cap_forwarding, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN0x80000000);
15260 proto_tree_add_item(subtree, hf_ieee80211_mesh_config_cap_mbca_enabled, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN0x80000000);
15261 proto_tree_add_item(subtree, hf_ieee80211_mesh_config_cap_tbtt_adjusting, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN0x80000000);
15262 proto_tree_add_item(subtree, hf_ieee80211_mesh_config_cap_power_save_level, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN0x80000000);
15263 break;
15264 }
15265
15266 case TAG_MESH_ID114:
15267 {
15268 const guint8* mesh_id;
15269 offset += 2;
15270
15271 proto_tree_add_item_ret_string(tree, hf_ieee80211_mesh_id, tvb, offset, tag_len, ENC_ASCII0x00000000|ENC_NA0x00000000, wmem_packet_scope(), &mesh_id);
15272 if (tag_len > 0) {
15273 col_append_fstr(pinfo->cinfo, COL_INFO, ", MESHID=%s", format_text(mesh_id, tag_len));
15274 proto_item_append_text(ti, ": %s", format_text(mesh_id, tag_len));
15275 }
15276
15277 break;
15278 }
15279
15280 case TAG_MESH_PREQ130:
15281 {
15282 guint8 flags = tvb_get_guint8(tvb, offset + 2);
15283 guint8 targs, i;
15284
15285 offset += 2;
15286 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
15287 offset += 1;
15288 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
15289 offset += 1;
15290 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
15291 offset += 1;
15292 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_pdid, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15293 offset += 4;
15294 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sta, tvb, offset, 6, ENC_NA0x00000000);
15295 offset += 6;
15296 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15297 offset += 4;
15298
15299 if (flags & (1<<6)) {
15300 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_ext, tvb, offset, 6, ENC_NA0x00000000);
15301 offset += 6;
15302 }
15303 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15304 offset += 4;
15305 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15306 offset += 4;
15307 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
15308 targs = tvb_get_guint8(tvb, offset);
15309 offset += 1;
15310 for (i = 0; i < targs; i++) {
15311 const int * targ_flags[] = {
15312 &hf_ieee80211_ff_hwmp_targ_to_flags,
15313 &hf_ieee80211_ff_hwmp_targ_usn_flags,
15314 NULL((void*)0)
15315 };
15316
15317 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_hwmp_targ_flags,
15318 ett_hwmp_targ_flags_tree, targ_flags, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15319
15320 offset += 1;
15321 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA0x00000000);
15322 offset += 6;
15323 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15324 offset += 4;
15325 }
15326 break;
15327 }
15328
15329 case TAG_MESH_PREP131:
15330 {
15331 guint8 flags = tvb_get_guint8(tvb, offset + 2);
15332 offset += 2;
15333 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
15334 offset += 1;
15335 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
15336 offset += 1;
15337 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset , 1, ENC_LITTLE_ENDIAN0x80000000);
15338 offset += 1;
15339 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA0x00000000);
15340 offset += 6;
15341 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15342 offset += 4;
15343 if (flags & (1<<6)) {
15344 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_ext, tvb, offset, 6, ENC_NA0x00000000);
15345 offset += 6;
15346 }
15347 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15348 offset += 4;
15349 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15350 offset += 4;
15351 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sta, tvb, offset, 6, ENC_NA0x00000000);
15352 offset += 6;
15353 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15354 offset += 4;
15355 break;
15356 }
15357
15358 case TAG_MESH_PERR132:
15359 {
15360 guint8 targs, i;
15361
15362 offset += 2;
15363 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
15364 offset += 1;
15365 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
15366 targs = tvb_get_guint8(tvb, offset);
15367 offset += 1;
15368 for (i = 0; i < targs; i++) {
15369 guint8 flags = tvb_get_guint8(tvb, offset);
15370
15371 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
15372 offset += 1;
15373 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA0x00000000);
15374 offset += 6;
15375 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15376 offset += 4;
15377 if (flags & (1<<6)) {
15378 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_ext, tvb, offset, 6, ENC_NA0x00000000);
15379 offset += 6;
15380 }
15381 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
15382 }
15383 break;
15384 }
15385
15386 case TAG_RANN126:
15387 {
15388 offset += 2;
15389 proto_tree_add_item(tree, hf_ieee80211_rann_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
15390 offset += 1;
15391 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
15392 offset += 1;
15393 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
15394 offset += 1;
15395 proto_tree_add_item(tree, hf_ieee80211_rann_root_sta, tvb, offset, 6, ENC_NA0x00000000);
15396 offset += 6;
15397 proto_tree_add_item(tree, hf_ieee80211_rann_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15398 offset += 4;
15399 proto_tree_add_item(tree, hf_ieee80211_rann_interval, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15400 offset += 4;
15401 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15402 offset += 4;
15403 break;
15404 }
15405
15406 case TAG_MESH_CHANNEL_SWITCH118: /* Mesh Channel Switch Parameters (118) */
15407 {
15408 proto_item *item;
15409 proto_tree *subtree;
15410 if (tag_len != 6)
15411 {
15412 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 6", tag_len);
15413 break;
15414 }
15415 offset += 2;
15416
15417 proto_tree_add_item(tree, hf_ieee80211_mesh_channel_switch_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
15418 proto_item_append_text(ti, " TTL: %d", tvb_get_guint8(tvb, offset));
15419 offset += 1;
15420
15421 item = proto_tree_add_item(tree, hf_ieee80211_mesh_channel_switch_flag, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
15422 subtree = proto_item_add_subtree(item, ett_mesh_chswitch_flag_tree);
15423 proto_tree_add_item(subtree, hf_ieee80211_mesh_chswitch_flag_initiator, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
15424 proto_tree_add_item(subtree, hf_ieee80211_mesh_chswitch_flag_txrestrict, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
15425 offset += 1;
15426
15427 proto_tree_add_item(tree, hf_ieee80211_mesh_channel_switch_reason_code, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15428 offset += 2;
15429
15430 proto_tree_add_item(tree, hf_ieee80211_mesh_channel_switch_precedence_value, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15431 offset += 2;
15432 break;
15433 }
15434
15435 case TAG_INTERWORKING107:
15436 dissect_interworking(pinfo, tree, ti, tvb, offset);
15437 break;
15438 case TAG_ADVERTISEMENT_PROTOCOL108:
15439 {
15440 dissect_advertisement_protocol(pinfo, tree, tvb, offset, NULL((void*)0));
15441 break;
15442 }
15443 case TAG_QOS_MAP_SET110:
15444 dissect_qos_map_set(pinfo, tree, ti, tvb, offset);
15445 break;
15446 case TAG_ROAMING_CONSORTIUM111:
15447 dissect_roaming_consortium(pinfo, tree, ti, tvb, offset);
15448 break;
15449 case TAG_AP_CHANNEL_REPORT51: /* 7.3.2.36 AP Channel Report element */
15450 dissect_ap_channel_report(tvb, pinfo, tree, offset + 2, tag_len, ti_len, tag_end, ti);
15451 break;
15452 case TAG_NEIGHBOR_REPORT52:
15453 dissect_neighbor_report(tvb, pinfo, tree, offset + 2, tag_len, ti_len, tag_end, ti);
15454 break;
15455
15456 case TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT60:
15457 {
15458 if (tag_len != 4)
15459 {
15460 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4", tag_len);
15461 break;
15462 }
15463
15464 offset += 2;
15465
15466 offset += add_ff_extended_channel_switch_announcement(tree, tvb, pinfo, offset);
15467
15468 break;
15469 }
15470 case TAG_SUPPORTED_OPERATING_CLASSES59:
15471 {
15472 guint i;
15473
15474 if (tag_len < 2) {
15475 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 3", tag_len);
15476 break;
15477 } else if (tag_len > 32) {
15478 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be < 32", tag_len);
15479 break;
15480 }
15481
15482 offset += 2;
15483
15484 proto_tree_add_item(tree, hf_ieee80211_tag_supported_ope_classes_current, tvb, offset, 1, ENC_NA0x00000000);
15485
15486 offset += 1;
15487 /* Partially taken from the ssid section */
15488 tag_data_ptr = tvb_get_ptr(tvb, offset, tag_len);
15489 for (i = 0, n = 0; (i < tag_len) && (n < SHORT_STR256); i++) {
15490 ret = g_snprintf(print_buff + n, SHORT_STR256 - n, (i == tag_len-1)?"%d":"%d, ", tag_data_ptr[i]);
15491 if (ret >= SHORT_STR256 - n) {
15492 /* ret >= <buf_size> means buffer truncated */
15493 break;
15494 }
15495 n += ret;
15496 }
15497 proto_tree_add_string(tree, hf_ieee80211_tag_supported_ope_classes_alternate, tvb, offset, tag_len, print_buff);
15498
15499 break;
15500 }
15501 case TAG_RELAY_CAPABILITIES167:
15502 {
15503 add_tag_relay_capabilities(pinfo, ti_len, tag_len, tree, tvb, &offset);
15504 break;
15505 }
15506 case TAG_DMG_BSS_PRAMTER_CHANGE152:
15507 {
15508 gboolean size;
15509 if (tag_len != 7)
15510 {
15511 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 7", tag_len);
15512 break;
15513 }
15514 offset += 2;
15515 size = (tvb_get_guint8(tvb, offset) & 0x02) >> 1;
15516 proto_tree_add_item(tree, hf_ieee80211_tag_move, tvb, offset, 1, ENC_NA0x00000000);
15517 proto_tree_add_item(tree, hf_ieee80211_tag_size, tvb, offset, 1, ENC_NA0x00000000);
15518 offset += 1;
15519 proto_tree_add_item(tree, hf_ieee80211_tag_tbtt_offset, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15520 offset += 4;
15521 if(size == TRUE(!(0))) { /* if size bit is 0, the field is reserved. */
15522 proto_tree_add_item(tree, hf_ieee80211_tag_bi_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15523 }
15524 offset += 2;
15525 break;
15526 }
15527 case TAG_DMG_CAPABILITIES148:
15528 {
15529 if (tag_len != 17)
15530 {
15531 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 17", tag_len);
15532 break;
15533 }
15534 offset += 2;
15535 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_capa_sta_addr, tvb, offset, 6, ENC_NA0x00000000);
15536 offset += 6;
15537 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_capa_aid, tvb, offset, 1, ENC_NA0x00000000);
15538 offset += 1;
15539 proto_tree_add_item(tree, hf_ieee80211_tag_reverse_direction, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15540 proto_tree_add_item(tree, hf_ieee80211_tag_hlts, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15541 proto_tree_add_item(tree, hf_ieee80211_tag_tpc, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15542 proto_tree_add_item(tree, hf_ieee80211_tag_spsh, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15543 proto_tree_add_item(tree, hf_ieee80211_tag_rx_antenna, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15544 proto_tree_add_item(tree, hf_ieee80211_tag_fast_link, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15545 proto_tree_add_item(tree, hf_ieee80211_tag_num_sectors, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15546 proto_tree_add_item(tree, hf_ieee80211_tag_rxss_length, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15547 proto_tree_add_item(tree, hf_ieee80211_tag_reciprocity, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15548 proto_tree_add_item(tree, hf_ieee80211_tag_max_ampdu_exp, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15549 offset += 3;
15550 proto_tree_add_item(tree, hf_ieee80211_tag_min_mpdu_sapcing, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15551 proto_tree_add_item(tree, hf_ieee80211_tag_ba_flow_control, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15552 proto_tree_add_item(tree, hf_ieee80211_tag_max_sc_rx_mcs, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15553 proto_tree_add_item(tree, hf_ieee80211_tag_max_ofdm_rx_mcs, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15554 proto_tree_add_item(tree, hf_ieee80211_tag_max_sc_tx_mcs, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15555 proto_tree_add_item(tree, hf_ieee80211_tag_max_ofdm_tx_mcs, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15556 offset += 3;
15557 proto_tree_add_item(tree, hf_ieee80211_tag_low_power_supported, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15558 proto_tree_add_item(tree, hf_ieee80211_tag_code_rate, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15559 proto_tree_add_item(tree, hf_ieee80211_tag_dtp, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15560 proto_tree_add_item(tree, hf_ieee80211_tag_appdu_supp, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15561 proto_tree_add_item(tree, hf_ieee80211_tag_heartbeat, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15562 proto_tree_add_item(tree, hf_ieee80211_tag_other_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15563 proto_tree_add_item(tree, hf_ieee80211_tag_pattern_recip, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15564 proto_tree_add_item(tree, hf_ieee80211_tag_heartbeat_elapsed, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15565 proto_tree_add_item(tree, hf_ieee80211_tag_grant_ack_supp, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15566 proto_tree_add_item(tree, hf_ieee80211_tag_RXSSTxRate_supp, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15567 offset += 2;
15568 proto_tree_add_item(tree, hf_ieee80211_tag_pcp_tddti, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15569 proto_tree_add_item(tree, hf_ieee80211_tag_pcp_PSA, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15570 proto_tree_add_item(tree, hf_ieee80211_tag_pcp_handover, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15571 proto_tree_add_item(tree, hf_ieee80211_tag_pcp_max_assoc, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15572 proto_tree_add_item(tree, hf_ieee80211_tag_pcp_power_src, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15573 proto_tree_add_item(tree, hf_ieee80211_tag_pcp_decenter, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15574 proto_tree_add_item(tree, hf_ieee80211_tag_pcp_forwarding, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15575 proto_tree_add_item(tree, hf_ieee80211_tag_pcp_center, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15576 offset += 2;
15577 break;
15578 }
15579 case TAG_DMG_OPERATION151:
15580 {
15581 if (tag_len != 10)
15582 {
15583 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 10", tag_len);
15584 break;
15585 }
15586 offset += 2;
15587 proto_tree_add_item(tree, hf_ieee80211_tag_pcp_tddti, tvb, offset, 1, ENC_NA0x00000000);
15588 proto_tree_add_item(tree, hf_ieee80211_tag_pcp_PSA, tvb, offset, 1, ENC_NA0x00000000);
15589 proto_tree_add_item(tree, hf_ieee80211_tag_pcp_handover, tvb, offset, 1, ENC_NA0x00000000);
15590 offset += 2;
15591 proto_tree_add_item(tree, hf_ieee80211_tag_PSRSI, tvb, offset, 1, ENC_NA0x00000000);
15592 offset += 1;
15593 proto_tree_add_item(tree, hf_ieee80211_tag_min_BHI_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15594 offset += 2;
15595 proto_tree_add_item(tree, hf_ieee80211_tag_brdct_sta_info_dur, tvb, offset, 1, ENC_NA0x00000000);
15596 offset += 1;
15597 proto_tree_add_item(tree, hf_ieee80211_tag_assoc_resp_confirm_time, tvb, offset, 1, ENC_NA0x00000000);
15598 offset += 1;
15599 proto_tree_add_item(tree, hf_ieee80211_tag_min_pp_duration, tvb, offset, 1, ENC_NA0x00000000);
15600 offset += 1;
15601 proto_tree_add_item(tree, hf_ieee80211_tag_SP_idle_timeout, tvb, offset, 1, ENC_NA0x00000000);
15602 offset += 1;
15603 proto_tree_add_item(tree, hf_ieee80211_tag_max_lost_beacons, tvb, offset, 1, ENC_NA0x00000000);
15604 offset += 1;
15605 break;
15606 }
15607 case TAG_ANTENNA_SECTOR_ID190:
15608 {
15609 if (tag_len != 4)
15610 {
15611 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4", tag_len);
15612 break;
15613 }
15614 offset += 2;
15615 proto_tree_add_item(tree, hf_ieee80211_tag_type, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15616 proto_tree_add_item(tree, hf_ieee80211_tag_tap1, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15617 proto_tree_add_item(tree, hf_ieee80211_tag_state1, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15618 proto_tree_add_item(tree, hf_ieee80211_tag_tap2, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15619 proto_tree_add_item(tree, hf_ieee80211_tag_state2, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15620 offset += 4;
15621 break;
15622 }
15623 case TAG_EXTENDED_SCHEDULE144:
15624 {
15625 guint32 i = 0;
15626 gboolean isGrant;
15627 proto_tree * alloc_tree;
15628 if ((tag_len%15) != 0)
15629 {
15630 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be N*15 where 0<=N<=17", tag_len);
15631 break;
15632 }
15633 offset += 2;
15634 isGrant = ((ftype==CTRL_GRANT0x164)||(ftype==CTRL_GRANT_ACK0x167));
15635 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_CTRL_GRANT_OR_GRANT_ACK_KEY2, &isGrant);
15636 for(i=0; i < tag_len; i+=15) {
15637 alloc_tree = proto_tree_add_subtree_format(tree, tvb, offset, 15, ett_allocation_tree, NULL((void*)0), "Allocation %d", i/15);
15638 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_allocation_id, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15639 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_allocation_type, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15640 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_pseudo_static, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15641 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_truncatable, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15642 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_extendable, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15643 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_pcp_active, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15644 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_lp_sc_used, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15645 offset += 2;
15646 offset += add_ff_beamforming_ctrl(alloc_tree, tvb, pinfo, offset);
15647 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_src_aid, tvb, offset, 1, ENC_NA0x00000000);
15648 offset += 1;
15649 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_dest_aid, tvb, offset, 1, ENC_NA0x00000000);
15650 offset += 1;
15651 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_start, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15652 offset += 4;
15653 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_block_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15654 offset += 2;
15655 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_num_blocks, tvb, offset, 1, ENC_NA0x00000000);
15656 offset += 1;
15657 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_block_period, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15658 offset += 2;
15659 }
15660 break;
15661 }
15662 case TAG_STA_AVAILABILITY145:
15663 {
15664 guint32 i = 0;
15665 proto_tree * sta_info_tree;
15666 if ((tag_len%2) != 0)
15667 {
15668 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be N*2 where N>=0", tag_len);
15669 break;
15670 }
15671 offset += 2;
15672 for(i=0; i < tag_len; i+=2) {
15673 sta_info_tree = proto_tree_add_subtree_format(tree, tvb, offset, 2, ett_sta_info, NULL((void*)0), "STA Info %d", i/2);
15674 proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15675 proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_cbap, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15676 proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_pp_avail, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15677 offset += 2;
15678 }
15679 break;
15680 }
15681 case TAG_NEXT_DMG_ATI147:
15682 {
15683 if (tag_len != 6)
15684 {
15685 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 6", tag_len);
15686 break;
15687 }
15688 offset += 2;
15689 proto_tree_add_item(tree, hf_ieee80211_tag_next_ati_start_time, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15690 offset += 4;
15691 proto_tree_add_item(tree, hf_ieee80211_tag_next_ati_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15692 offset += 2;
15693 break;
15694 }
15695 case TAG_NEXTPCP_LIST160:
15696 {
15697 guint32 i = 0;
15698 if (tag_len < 1)
15699 {
15700 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 1", tag_len);
15701 break;
15702 }
15703 offset += 2;
15704 proto_tree_add_item(tree, hf_ieee80211_tag_nextpcp_token, tvb, offset, 1, ENC_NA0x00000000);
15705 offset += 1;
15706 for(i=0; i < tag_len-1; i+=1) {
15707 proto_tree_add_item(tree, hf_ieee80211_tag_nextpcp_list, tvb, offset, 1, ENC_NA0x00000000);
15708 offset += 1;
15709 }
15710 break;
15711 }
15712 case TAG_PCP_HANDOVER161:
15713 {
15714 if (tag_len != 13)
15715 {
15716 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 13", tag_len);
15717 break;
15718 }
15719 offset += 2;
15720 proto_tree_add_item(tree, hf_ieee80211_tag_old_bssid, tvb, offset, 6, ENC_NA0x00000000);
15721 offset += 6;
15722 proto_tree_add_item(tree, hf_ieee80211_tag_new_pcp_addr, tvb, offset, 6, ENC_NA0x00000000);
15723 offset += 6;
15724 proto_tree_add_item(tree, hf_ieee80211_tag_reamaining_BI, tvb, offset, 1, ENC_NA0x00000000);
15725 offset += 1;
15726 break;
15727 }
15728 case TAG_BEAMLINK_MAINTAINCE169:
15729 {
15730 if (tag_len != 1)
15731 {
15732 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 1", tag_len);
15733 break;
15734 }
15735 offset += 2;
15736 offset += add_ff_beamformed_link(tree, tvb, pinfo, offset);
15737 break;
15738 }
15739 case TAG_QUIET_PERIOD_RES177:
15740 {
15741 if (tag_len != 10)
15742 {
15743 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 10", tag_len);
15744 break;
15745 }
15746 offset += 2;
15747 proto_tree_add_item(tree, hf_ieee80211_tag_request_token, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15748 offset += 2;
15749 proto_tree_add_item(tree, hf_ieee80211_tag_bssid, tvb, offset, 6, ENC_NA0x00000000);
15750 offset += 6;
15751 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
15752 break;
15753 }
15754 case TAG_RELAY_TRANSFER_PARAM168:
15755 {
15756 if (tag_len != 8)
15757 {
15758 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
15759 break;
15760 }
15761 offset += 2;
15762 proto_tree_add_item(tree, hf_ieee80211_tag_duplex_relay, tvb, offset, 1, ENC_NA0x00000000);
15763 proto_tree_add_item(tree, hf_ieee80211_tag_cooperation_relay, tvb, offset, 1, ENC_NA0x00000000);
15764 proto_tree_add_item(tree, hf_ieee80211_tag_tx_mode, tvb, offset, 1, ENC_NA0x00000000);
15765 proto_tree_add_item(tree, hf_ieee80211_tag_link_change_interval, tvb, offset+1, 1, ENC_NA0x00000000);
15766 proto_tree_add_item(tree, hf_ieee80211_tag_data_sensing_time, tvb, offset+2, 1, ENC_NA0x00000000);
15767 proto_tree_add_item(tree, hf_ieee80211_tag_first_period, tvb, offset+3, 2, ENC_LITTLE_ENDIAN0x80000000);
15768 proto_tree_add_item(tree, hf_ieee80211_tag_second_period, tvb, offset+5, 2, ENC_LITTLE_ENDIAN0x80000000);
15769 offset += 8;
15770 break;
15771 }
15772 case TAG_DMG_BEAM_REFINEMENT153:
15773 {
15774 if (tag_len != 5)
15775 {
15776 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 5", tag_len);
15777 break;
15778 }
15779 offset += 2;
15780 proto_tree_add_item(tree, hf_ieee80211_tag_initiator, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15781 proto_tree_add_item(tree, hf_ieee80211_tag_tx_train_res, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15782 proto_tree_add_item(tree, hf_ieee80211_tag_rx_train_res, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15783 proto_tree_add_item(tree, hf_ieee80211_tag_tx_trn_ok, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15784 proto_tree_add_item(tree, hf_ieee80211_tag_txss_fbck_req, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15785 proto_tree_add_item(tree, hf_ieee80211_tag_bs_fbck, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15786 proto_tree_add_item(tree, hf_ieee80211_tag_bs_fbck_antenna_id, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15787 proto_tree_add_item(tree, hf_ieee80211_tag_snr_requested, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15788 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_requested, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15789
15790 /*
15791 * This is confusing.
15792 * We don't support bitfields in fields bigger than 32 bits, and none
15793 * of the bitfields boundaries line up with byte boundaries, so we have
15794 * to slice this 40-bit field into overlapping pieces.
15795 *
15796 * The preceding piece had 16 bits, but the uppermost bit is the low-
15797 * order bit of the 2-bit "Number of Taps Requested" bitfield, so
15798 * we've only dissected the low-order 15 bits above.
15799 *
15800 * So we skip the first byte of those 16 bits, and fetch a 4-byte field
15801 * that starts with the second byte of those 16 bits.
15802 */
15803 offset += 1;
15804 proto_tree_add_item(tree, hf_ieee80211_tag_number_of_taps_requested, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15805 proto_tree_add_item(tree, hf_ieee80211_tag_sector_id_order_req, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15806 proto_tree_add_item(tree, hf_ieee80211_tag_snr_present, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15807 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_present, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15808 proto_tree_add_item(tree, hf_ieee80211_tag_tap_delay_present, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15809 proto_tree_add_item(tree, hf_ieee80211_tag_number_of_taps_present, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15810 proto_tree_add_item(tree, hf_ieee80211_tag_number_of_measurement, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15811 proto_tree_add_item(tree, hf_ieee80211_tag_sector_id_order_present, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15812 proto_tree_add_item(tree, hf_ieee80211_tag_number_of_beams, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15813 proto_tree_add_item(tree, hf_ieee80211_tag_mid_extension, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15814 proto_tree_add_item(tree, hf_ieee80211_tag_capability_request, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15815 offset += 4;
15816 break;
15817 }
15818 case TAG_WAKEUP_SCHEDULE_AD143:
15819 {
15820 if (tag_len != 8)
15821 {
15822 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
15823 break;
15824 }
15825 offset += 2;
15826 proto_tree_add_item(tree, hf_ieee80211_tag_bi_start_time, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15827 offset += 4;
15828 proto_tree_add_item(tree, hf_ieee80211_tag_sleep_cycle, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15829 offset += 2;
15830 proto_tree_add_item(tree, hf_ieee80211_tag_num_awake_bis, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15831 offset += 2;
15832 break;
15833 }
15834 case TAG_DMG_TSPEC146:
15835 {
15836 gboolean isGrant;
15837 int num_constraints;
15838 if (tag_len < 14)
15839 {
15840 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 14", tag_len);
15841 break;
15842 }
15843 offset += 2;
15844 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_allocation_id, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15845 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_allocation_type, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15846 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_allocation_format, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15847 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_pseudo_static, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15848 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_truncatable, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15849 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_extendable, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15850 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_lp_sc_used, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15851 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_up, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15852 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_dest_aid, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15853 offset += 3;
15854 isGrant = ((ftype==CTRL_GRANT0x164)||(ftype==CTRL_GRANT_ACK0x167));
15855 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_CTRL_GRANT_OR_GRANT_ACK_KEY2, &isGrant);
15856 offset += add_ff_beamforming_ctrl(tree, tvb, pinfo, 2);
15857 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_allocation_period, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15858 offset += 2;
15859 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_min_allocation, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15860 offset += 2;
15861 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_max_allocation, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15862 offset += 2;
15863 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_min_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15864 offset += 2;
15865 num_constraints = tvb_get_guint8(tvb, offset);
15866 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_num_of_constraints, tvb, offset, 1, ENC_NA0x00000000);
15867 offset += 1;
15868 while(num_constraints > 0) {
15869 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_start_time, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15870 offset += 4;
15871 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15872 offset += 2;
15873 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_period, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15874 offset += 2;
15875 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_interferer_mac, tvb, offset, 2, ENC_NA0x00000000);
15876 offset += 6;
15877 num_constraints--;
15878 }
15879 break;
15880 }
15881 case TAG_CHANNEL_MEASURMENT_FB154:
15882 {
15883 int num_measurement;
15884 if (tag_len%5 != 0)
15885 {
15886 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be multiple of 5", tag_len);
15887 break;
15888 }
15889 num_measurement = tvb_get_guint8(tvb, offset+1);
15890 offset += 2;
15891 while(num_measurement > 0) {
15892 proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset, 1, ENC_NA0x00000000);
15893 offset += 1;
15894 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_realtive_I, tvb, offset, 1, ENC_NA0x00000000);
15895 offset += 1;
15896 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_realtive_Q, tvb, offset, 1, ENC_NA0x00000000);
15897 offset += 1;
15898 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_tap_delay, tvb, offset, 1, ENC_NA0x00000000);
15899 offset += 1;
15900 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_sector_id, tvb, offset, 1, ENC_NA0x00000000);
15901 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_antenna_id, tvb, offset, 1, ENC_NA0x00000000);
15902 offset += 1;
15903 num_measurement--;
15904 }
15905 break;
15906 }
15907 case TAG_AWAKE_WINDOW157:
15908 {
15909 if (tag_len != 2)
15910 {
15911 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 2", tag_len);
15912 break;
15913 }
15914 offset += 2;
15915 proto_tree_add_item(tree, hf_ieee80211_tag_awake_window, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15916 offset += 2;
15917 break;
15918 }
15919 case TAG_ADDBA_EXT159:
15920 {
15921 if (tag_len != 1)
15922 {
15923 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 1", tag_len);
15924 break;
15925 }
15926 offset += 2;
15927 proto_tree_add_item(tree, hf_ieee80211_tag_addba_ext_no_frag, tvb, offset, 1, ENC_NA0x00000000);
15928 offset += 1;
15929 break;
15930 }
15931 case TAG_MULTI_BAND158:
15932 {
15933 gboolean chiper_present, addr_present;
15934 if (tag_len < 22)
15935 {
15936 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 22", tag_len);
15937 break;
15938 }
15939 offset += 2;
15940 chiper_present = (tvb_get_letohs(tvb, offset) & 0x08) >> 3;
15941 addr_present = (tvb_get_letohs(tvb, offset) & 0x10) >> 4;
15942 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_ctrl_sta_role, tvb, offset, 1, ENC_NA0x00000000);
15943 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_ctrl_addr_present, tvb, offset, 1, ENC_NA0x00000000);
15944 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_ctrl_cipher_present, tvb, offset, 1, ENC_NA0x00000000);
15945 offset += 1;
15946 offset += add_ff_band_id(tree, tvb, pinfo, 1);
15947 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_oper_class, tvb, offset, 1, ENC_NA0x00000000);
15948 offset += 1;
15949 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_channel_number, tvb, offset, 1, ENC_NA0x00000000);
15950 offset += 1;
15951 proto_tree_add_item(tree, hf_ieee80211_tag_bssid, tvb, offset, 6, ENC_NA0x00000000);
15952 offset += 6;
15953 offset += add_ff_beacon_interval(tree, tvb, pinfo, 2);
15954 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_tsf_offset, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
15955 offset += 8;
15956 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_conn_ap, tvb, offset, 1, ENC_NA0x00000000);
15957 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_conn_pcp, tvb, offset, 1, ENC_NA0x00000000);
15958 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_conn_dls, tvb, offset, 1, ENC_NA0x00000000);
15959 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_conn_tdls, tvb, offset, 1, ENC_NA0x00000000);
15960 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_conn_ibss, tvb, offset, 1, ENC_NA0x00000000);
15961 offset += 1;
15962 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_fst_timeout, tvb, offset, 1, ENC_NA0x00000000);
15963 offset += 1;
15964 if(addr_present)
15965 {
15966 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_sta_mac, tvb, offset, 6, ENC_NA0x00000000);
15967 offset += 6;
15968 }
15969 if(chiper_present)
15970 {
15971 proto_item *rsn_pcs_count, *rsn_pcs_item, *rsn_sub_pcs_item;
15972 proto_tree *rsn_pcs_tree, *rsn_sub_pcs_tree;
15973 gint ii;
15974 guint16 pcs_count;
15975 rsn_pcs_count = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15976 pcs_count = tvb_get_letohs(tvb, offset);
15977 offset += 2;
15978
15979 if (offset + (pcs_count * 4) > tag_end)
15980 {
15981 expert_add_info_format(pinfo, rsn_pcs_count, &ei_ieee80211_rsn_pcs_count,
15982 "Pairwise Cipher Suite Count too large, 4*%u > %d", pcs_count, tag_end - offset);
15983 pcs_count = (tag_end - offset) / 4;
15984 }
15985
15986 rsn_pcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_list, tvb, offset, pcs_count * 4, ENC_NA0x00000000);
15987 rsn_pcs_tree = proto_item_add_subtree(rsn_pcs_item, ett_rsn_pcs_tree);
15988 for (ii = 0; ii < pcs_count; ii++)
15989 {
15990 rsn_sub_pcs_item = proto_tree_add_item(rsn_pcs_tree, hf_ieee80211_rsn_pcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
15991 rsn_sub_pcs_tree = proto_item_add_subtree(rsn_sub_pcs_item, ett_rsn_sub_pcs_tree);
15992 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
15993
15994 /* Check if OUI is 00:0F:AC (ieee80211) */
15995 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
15996 {
15997 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
15998 proto_item_append_text(rsn_pcs_item, " %s", rsn_pcs_return(tvb_get_ntohl(tvb, offset)));
15999 } else {
16000 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
16001 }
16002 offset += 4;
16003 }
16004 }
16005 break;
16006 }
16007 case TAG_DMG_LINK_MARGIN162:
16008 {
16009 if (tag_len != 8)
16010 {
16011 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
16012 break;
16013 }
16014 offset += 2;
16015 proto_tree_add_item(tree, hf_ieee80211_tag_activity, tvb, offset, 1, ENC_NA0x00000000);
16016 offset += 1;
16017 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_link_adapt_mcs, tvb, offset, 1, ENC_NA0x00000000);
16018 offset += 1;
16019 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_link_adapt_link_margin, tvb, offset, 1, ENC_NA0x00000000);
16020 offset += 1;
16021 proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset, 1, ENC_NA0x00000000);
16022 offset += 1;
16023 proto_tree_add_item(tree, hf_ieee80211_tag_ref_timestamp, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
16024 offset += 4;
16025 break;
16026 }
16027 case TAG_DMG_LINK_ADAPTION_ACK172:
16028 {
16029 if (tag_len != 5)
16030 {
16031 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 5", tag_len);
16032 break;
16033 }
16034 offset += 2;
16035 proto_tree_add_item(tree, hf_ieee80211_tag_activity, tvb, offset, 1, ENC_NA0x00000000);
16036 offset += 1;
16037 proto_tree_add_item(tree, hf_ieee80211_tag_ref_timestamp, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
16038 offset += 4;
16039 break;
16040 }
16041 case TAG_SWITCHING_STREAM163:
16042 {
16043 int param_num;
16044 if (tag_len < 4)
16045 {
16046 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 4", tag_len);
16047 break;
16048 }
16049 offset += 2;
16050 offset += add_ff_band_id(tree, tvb, pinfo, 1);
16051 offset += add_ff_band_id(tree, tvb, pinfo, 1);
16052 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_non_qos, tvb, offset, 1, ENC_NA0x00000000);
16053 offset += 1;
16054 param_num = tvb_get_letohs(tvb, offset);
16055 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_param_num, tvb, offset, 1, ENC_NA0x00000000);
16056 offset += 1;
16057 while(param_num > 0)
16058 {
16059 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_old_tid, tvb, offset, 1, ENC_NA0x00000000);
16060 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_old_direction, tvb, offset, 1, ENC_NA0x00000000);
16061 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_new_tid, tvb, offset, 1, ENC_NA0x00000000);
16062 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_new_direction, tvb, offset, 1, ENC_NA0x00000000);
16063 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_new_valid_id, tvb, offset, 1, ENC_NA0x00000000);
16064 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_llt_type, tvb, offset, 1, ENC_NA0x00000000);
16065 param_num--;
16066 offset += 2;
16067 }
16068 break;
16069 }
16070 default:
16071 proto_tree_add_item(tree, hf_ieee80211_tag_data, tvb, offset + 1 + 1, tag_len, ENC_NA0x00000000);
16072 expert_add_info_format(pinfo, ti_tag, &ei_ieee80211_tag_data,
16073 "Dissector for 802.11 IE Tag"
16074 " (%s) code not implemented, Contact"
16075 " Wireshark developers if you want this supported", val_to_str_ext(tag_no,
16076 &tag_num_vals_ext, "(%d)"));
16077 proto_item_append_text(ti, ": Undecoded");
16078 break;
16079 }
16080 if (offset < tag_end) {
16081 /* TODO: add Expert info to indicate there is unknown data ! but all tagged option don't yet return offset.
16082 For the moment, this code only remove Clang Warnings about not used offset... */
16083 }
16084end_of_tag:
16085 return tag_len + 1 + 1;
16086}
16087
16088static void
16089ieee_80211_add_tagged_parameters(tvbuff_t *tvb, int offset, packet_info *pinfo,
16090 proto_tree *tree, int tagged_parameters_len, int ftype)
16091{
16092 int next_len;
16093 beacon_padding = 0; /* this is for the beacon padding confused with ssid fix */
16094 while (tagged_parameters_len > 0) {
16095 /* TODO make callers optionally specify the list of valid IE IDs? */
16096 if ((next_len=add_tagged_field (pinfo, tree, tvb, offset, ftype, NULL((void*)0), 0)) == 0)
16097 break;
16098 if (next_len > tagged_parameters_len) {
16099 /* XXX - flag this as an error? */
16100 next_len = tagged_parameters_len;
16101 }
16102 offset += next_len;
16103 tagged_parameters_len -= next_len;
16104 }
16105}
16106
16107/* ************************************************************************* */
16108/* Dissect 802.11 management frame */
16109/* ************************************************************************* */
16110static void
16111dissect_ieee80211_mgt(guint16 fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
16112{
16113 proto_item *ti;
16114 proto_tree *mgt_tree;
16115 proto_tree *fixed_tree;
16116 proto_tree *tagged_tree;
16117 int offset = 0;
16118 int tagged_parameter_tree_len;
16119
16120 ieee80211_tvb_invalid = FALSE(0);
16121
16122 /* check protocol activation */
16123 if (!proto_is_protocol_enabled(find_protocol_by_id(proto_wlan_mgt))) {
16124 call_data_dissector(tvb, pinfo, tree);
16125 return;
16126 }
16127
16128 ti = proto_tree_add_item(tree, proto_wlan_mgt, tvb, 0, -1, ENC_NA0x00000000);
16129 mgt_tree = proto_item_add_subtree(ti, ett_80211_mgt);
16130
16131 switch (COMPOSE_FRAME_TYPE(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf & 0x0C)<< 6) + (
(fcf) & 0xF0) + (((fcf) & 0xF00) >> 8)) : (((fcf
& 0x0C)<< 2)+(((fcf) & 0xF0) >> 4)))
)
16132 {
16133
16134 case MGT_ASSOC_REQ0x00:
16135 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 4);
16136 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
16137 add_ff_listen_ival(fixed_tree, tvb, pinfo, 2);
16138 offset = 4; /* Size of fixed fields */
16139
16140 tagged_parameter_tree_len =
16141 tvb_reported_length_remaining(tvb, offset);
16142 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
16143 tagged_parameter_tree_len);
16144 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
16145 tagged_parameter_tree_len, MGT_ASSOC_REQ0x00);
16146 break;
16147
16148
16149 case MGT_ASSOC_RESP0x01:
16150 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 6);
16151 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
16152 add_ff_status_code(fixed_tree, tvb, pinfo, 2);
16153 add_ff_assoc_id(fixed_tree, tvb, pinfo, 4);
16154 offset = 6; /* Size of fixed fields */
16155
16156 tagged_parameter_tree_len =
16157 tvb_reported_length_remaining(tvb, offset);
16158 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
16159 tagged_parameter_tree_len);
16160 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
16161 tagged_parameter_tree_len, MGT_ASSOC_RESP0x01);
16162 break;
16163
16164
16165 case MGT_REASSOC_REQ0x02:
16166 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 10);
16167 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
16168 add_ff_listen_ival(fixed_tree, tvb, pinfo, 2);
16169 add_ff_current_ap_addr(fixed_tree, tvb, pinfo, 4);
16170 offset = 10; /* Size of fixed fields */
16171
16172 tagged_parameter_tree_len =
16173 tvb_reported_length_remaining(tvb, offset);
16174 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
16175 tagged_parameter_tree_len);
16176 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
16177 tagged_parameter_tree_len, MGT_REASSOC_REQ0x02);
16178 break;
16179
16180 case MGT_REASSOC_RESP0x03:
16181 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 6);
16182 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
16183 add_ff_status_code(fixed_tree, tvb, pinfo, 2);
16184 add_ff_assoc_id(fixed_tree, tvb, pinfo, 4);
16185 offset = 6; /* Size of fixed fields */
16186
16187 tagged_parameter_tree_len =
16188 tvb_reported_length_remaining(tvb, offset);
16189 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
16190 tagged_parameter_tree_len);
16191 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
16192 tagged_parameter_tree_len, MGT_REASSOC_RESP0x03);
16193 break;
16194
16195
16196 case MGT_PROBE_REQ0x04:
16197 offset = 0;
16198 tagged_parameter_tree_len =
16199 tvb_reported_length_remaining(tvb, offset);
16200 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
16201 tagged_parameter_tree_len);
16202 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
16203 tagged_parameter_tree_len, MGT_PROBE_REQ0x04);
16204 break;
16205
16206 case MGT_PROBE_RESP0x05:
16207 {
16208 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 12);
16209 add_ff_timestamp(fixed_tree, tvb, pinfo, 0);
16210 add_ff_beacon_interval(fixed_tree, tvb, pinfo, 8);
16211 add_ff_cap_info(fixed_tree, tvb, pinfo, 10);
16212 offset = 12; /* Size of fixed fields */
16213
16214 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
16215 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset, tagged_parameter_tree_len);
16216 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, MGT_PROBE_RESP0x05);
16217 break;
16218 }
16219 case MGT_MEASUREMENT_PILOT0x06:
16220 {
16221 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 12);
16222 offset += add_ff_timestamp(fixed_tree, tvb, pinfo, offset);
16223 offset += add_ff_measurement_pilot_int(fixed_tree, tvb, pinfo, offset);
16224 offset += add_ff_beacon_interval(fixed_tree, tvb, pinfo, offset);
16225 offset += add_ff_cap_info(fixed_tree, tvb, pinfo, offset);
16226 offset += add_ff_country_str(fixed_tree, tvb, pinfo, offset);
16227 offset += add_ff_max_reg_pwr(fixed_tree, tvb, pinfo, offset);
16228 offset += add_ff_max_tx_pwr(fixed_tree, tvb, pinfo, offset);
16229 offset += add_ff_tx_pwr_used(fixed_tree, tvb, pinfo, offset);
16230 offset += add_ff_transceiver_noise_floor(fixed_tree, tvb, pinfo, offset);
16231 /* TODO DS Parameter Set ??? */
16232
16233 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
16234 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset, tagged_parameter_tree_len);
16235 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, MGT_MEASUREMENT_PILOT0x06);
16236 break;
16237 }
16238 case MGT_BEACON0x08: /* Dissect protocol payload fields */
16239 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 12);
16240 add_ff_timestamp(fixed_tree, tvb, pinfo, 0);
16241 add_ff_beacon_interval(fixed_tree, tvb, pinfo, 8);
16242 add_ff_cap_info(fixed_tree, tvb, pinfo, 10);
16243 offset = 12; /* Size of fixed fields */
16244
16245 tagged_parameter_tree_len =
16246 tvb_reported_length_remaining(tvb, offset);
16247 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
16248 tagged_parameter_tree_len);
16249 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
16250 tagged_parameter_tree_len, MGT_BEACON0x08);
16251 break;
16252
16253 case MGT_ATIM0x09:
16254 break;
16255
16256 case MGT_DISASS0x0A:
16257 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 2);
16258 add_ff_reason_code(fixed_tree, tvb, pinfo, 0);
16259 offset = 2; /* Size of fixed fields */
16260 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
16261 if (tagged_parameter_tree_len > 0) {
16262 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
16263 tagged_parameter_tree_len);
16264 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
16265 tagged_parameter_tree_len, MGT_DISASS0x0A);
16266 }
16267 break;
16268
16269 case MGT_AUTHENTICATION0x0B:
16270 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 6);
16271 add_ff_auth_alg(fixed_tree, tvb, pinfo, 0);
16272 add_ff_auth_trans_seq(fixed_tree, tvb, pinfo, 2);
16273 add_ff_status_code(fixed_tree, tvb, pinfo, 4);
16274 offset = 6; /* Size of fixed fields */
16275
16276 tagged_parameter_tree_len =
16277 tvb_reported_length_remaining(tvb, offset);
16278 if (tagged_parameter_tree_len > 0)
16279 {
16280 tagged_tree = get_tagged_parameter_tree(mgt_tree,
16281 tvb,
16282 offset,
16283 tagged_parameter_tree_len);
16284 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
16285 tagged_parameter_tree_len, MGT_AUTHENTICATION0x0B);
16286 }
16287 break;
16288
16289 case MGT_DEAUTHENTICATION0x0C:
16290 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 2);
16291 add_ff_reason_code(fixed_tree, tvb, pinfo, 0);
16292 offset = 2; /* Size of fixed fields */
16293 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
16294 if (tagged_parameter_tree_len > 0) {
16295 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
16296 tagged_parameter_tree_len);
16297 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
16298 tagged_parameter_tree_len, MGT_DEAUTHENTICATION0x0C);
16299 }
16300 break;
16301
16302 case MGT_ACTION0x0D:
16303 {
16304 proto_item *lcl_fixed_hdr;
16305 proto_tree *lcl_fixed_tree;
16306 lcl_fixed_tree = proto_tree_add_subtree(mgt_tree, tvb, 0, 0, ett_fixed_parameters, &lcl_fixed_hdr, "Fixed parameters");
16307 offset += add_ff_action(lcl_fixed_tree, tvb, pinfo, 0);
16308
16309 proto_item_set_len(lcl_fixed_hdr, offset);
16310 if (ieee80211_tvb_invalid)
16311 break; /* Buffer not available for further processing */
16312 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
16313 if (tagged_parameter_tree_len > 0)
16314 {
16315 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
16316 tagged_parameter_tree_len);
16317 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
16318 tagged_parameter_tree_len, MGT_ACTION0x0D);
16319 }
16320 break;
16321 }
16322 case MGT_ACTION_NO_ACK0x0E:
16323 {
16324 proto_item *lcl_fixed_hdr;
16325 proto_tree *lcl_fixed_tree;
16326 lcl_fixed_tree = proto_tree_add_subtree(mgt_tree, tvb, 0, 0, ett_fixed_parameters, &lcl_fixed_hdr, "Fixed parameters");
16327
16328 offset += add_ff_action(lcl_fixed_tree, tvb, pinfo, 0);
16329
16330 proto_item_set_len(lcl_fixed_hdr, offset);
16331 if (ieee80211_tvb_invalid)
16332 break; /* Buffer not available for further processing */
16333 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
16334 if (tagged_parameter_tree_len > 0)
16335 {
16336 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
16337 tagged_parameter_tree_len);
16338 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
16339 tagged_parameter_tree_len, MGT_ACTION_NO_ACK0x0E);
16340 }
16341 break;
16342 }
16343 case MGT_ARUBA_WLAN0x0F:
16344 {
16345 proto_tree *aruba_tree;
16346 guint16 type;
16347 type = tvb_get_ntohs(tvb, offset);
16348
16349 aruba_tree = proto_tree_add_subtree(mgt_tree, tvb, 0, 0, ett_fixed_parameters, NULL((void*)0), "Aruba Management");
16350
16351 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
16352 offset += 2;
16353 switch(type){
16354 case 0x0003: /* MTU Size */
16355 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba_mtu, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
16356 break;
16357 case 0x0005: /* HeartBeat Sequence */
16358 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba_hb_seq, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
16359 break;
16360 }
16361 break;
16362 }
16363 }
16364}
16365
16366static void
16367set_src_addr_cols(packet_info *pinfo, tvbuff_t *tvb, int offset, const char *type)
16368{
16369 address ether_addr;
16370
16371 set_address_tvb(&ether_addr, AT_ETHER, 6, tvb, offset);
16372
16373 col_add_fstr(pinfo->cinfo, COL_RES_DL_SRC, "%s (%s)",
16374 address_with_resolution_to_str(wmem_packet_scope(), &ether_addr), type);
16375}
16376
16377static void
16378set_dst_addr_cols(packet_info *pinfo, tvbuff_t *tvb, int offset, const char *type)
16379{
16380 address ether_addr;
16381
16382 set_address_tvb(&ether_addr, AT_ETHER, 6, tvb, offset);
16383
16384 col_add_fstr(pinfo->cinfo, COL_RES_DL_DST, "%s (%s)",
16385 address_with_resolution_to_str(wmem_packet_scope(), &ether_addr), type);
16386}
16387
16388static guint32
16389crc32_802_tvb_padded(tvbuff_t *tvb, guint hdr_len, guint hdr_size, guint len)
16390{
16391 guint32 c_crc;
16392
16393 c_crc = crc32_ccitt_tvb(tvb, hdr_len);
16394 c_crc = crc32_ccitt_tvb_offset_seed(tvb, hdr_size, len, ~c_crc);
16395
16396 return (c_crc);
16397}
16398
16399typedef enum {
16400 ENCAP_802_2,
16401 ENCAP_IPX,
16402 ENCAP_ETHERNET
16403} encap_t;
16404
16405/* ************************************************************************* */
16406/* Dissect 802.11 frame */
16407/* ************************************************************************* */
16408/*
16409 * The 802.11n specification makes some fairly significant changes to the
16410 * layout of the MAC header. The first two bits of the MAC header are the
16411 * protocol version. You'd think that the 802.11 committee would have
16412 * bumped the version to indicate a different MAC layout, but NOOOO -- we
16413 * have to go digging for bits in various locations instead.
16414 */
16415static int
16416dissect_ieee80211_common(tvbuff_t *tvb, packet_info *pinfo,
16417 proto_tree *tree, guint32 option_flags,
16418 struct ieee_802_11_phdr *phdr)
16419{
16420 guint16 fcf, flags, frame_type_subtype, ctrl_fcf, ctrl_type_subtype;
16421 guint16 cw_fcf;
16422 guint16 seq_control;
16423 guint32 seq_number, frag_number;
16424 gboolean more_frags;
16425 proto_item *ti = NULL((void*)0);
16426 proto_item *cw_item = NULL((void*)0);
16427 proto_item *hidden_item;
16428 proto_tree *cw_tree = NULL((void*)0);
16429 guint16 hdr_len, ohdr_len;
16430 guint16 htc_len = 0;
16431 gboolean has_fcs;
16432 gint len, reported_len, ivlen;
16433 gint sta_addr_offset = 0;
16434 const gchar *station_name;
16435 gboolean is_amsdu = 0;
16436 gboolean save_fragmented;
16437 guint32 addr_type;
16438 guint8 octet1, octet2;
16439 char out_buff[SHORT_STR256];
16440 gint is_iv_bad;
16441 guchar iv_buff[4];
16442 const char *addr1_str = NULL((void*)0);
16443 int addr1_hf = -1, addr1_hf_resolved = -1;
16444 guint offset;
16445 const gchar *fts_str;
16446 gchar flag_str[] = "opmPRMFTC";
16447 gint ii;
16448 guint16 qosoff = 0;
16449 guint16 qos_control = 0;
16450 gint meshctl_len = 0;
16451 guint8 mesh_flags;
16452 guint16 meshoff = 0;
16453 static wlan_hdr_t whdrs[4];
16454 gboolean retransmitted;
16455 gboolean isDMG = (phdr->has_frequency ?
16456 IS_80211AD(phdr->frequency)(((phdr->frequency) >= 57000) && ((phdr->frequency
) <= 66000))
:
16457 FALSE(0));
16458
16459 encap_t encap_type;
16460 proto_tree *hdr_tree = NULL((void*)0);
16461 tvbuff_t *next_tvb = NULL((void*)0);
16462 wlan_hdr_t *whdr;
16463
16464 AIRPDCAP_KEY_ITEM used_key;
16465
16466 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_DMG_KEY1, GINT_TO_POINTER(isDMG)((gpointer) (glong) (isDMG)));
16467
16468 whdr= &whdrs[0];
16469
16470 col_set_str(pinfo->cinfo, COL_PROTOCOL, "802.11");
16471 col_clear(pinfo->cinfo, COL_INFO);
16472
16473 fcf = FETCH_FCF(0)((option_flags & 0x00000001) ? (((guint16) ( (guint16) ((
guint16) (tvb_get_letohs(tvb, 0)) >> 8) | (guint16) ((guint16
) (tvb_get_letohs(tvb, 0)) << 8)))) : tvb_get_letohs(tvb
, 0))
;
16474 frame_type_subtype = COMPOSE_FRAME_TYPE(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf & 0x0C)<< 6) + (
(fcf) & 0xF0) + (((fcf) & 0xF00) >> 8)) : (((fcf
& 0x0C)<< 2)+(((fcf) & 0xF0) >> 4)))
;
16475 whdr->type = frame_type_subtype;
16476 if (frame_type_subtype == CTRL_CONTROL_WRAPPER0x17)
16477 ctrl_fcf = FETCH_FCF(10)((option_flags & 0x00000001) ? (((guint16) ( (guint16) ((
guint16) (tvb_get_letohs(tvb, 10)) >> 8) | (guint16) ((
guint16) (tvb_get_letohs(tvb, 10)) << 8)))) : tvb_get_letohs
(tvb, 10))
;
16478 else
16479 ctrl_fcf = 0;
16480
16481 fts_str = val_to_str_ext_const(frame_type_subtype, &frame_type_subtype_vals_ext,
16482 "Unrecognized (Reserved frame)");
16483 col_set_str(pinfo->cinfo, COL_INFO, fts_str);
16484
16485
16486# define FROM_TO_DS3 3
16487 flags = FCF_FLAGS(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))
;
16488 more_frags = HAVE_FRAGMENTS(flags)((flags) & 0x04);
16489
16490 for (ii = 0; ii < 8; ii++) {
16491 if (! (flags & 0x80 >> ii)) {
16492 flag_str[ii] = '.';
16493 }
16494 }
16495
16496 switch (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2)) {
16497
16498 case MGT_FRAME0x00:
16499 hdr_len = MGT_FRAME_HDR_LEN24;
16500 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x80)
) {
16501 /*
16502 * Management frames with the Order bit set have an HT Control field;
16503 * see 8.2.4.1.10 "Order field". If they're not HT frames, they should
16504 * never have the Order bit set.
16505 */
16506 hdr_len += 4;
16507 htc_len = 4;
16508 }
16509 break;
16510
16511 case CONTROL_FRAME0x01:
16512 if (frame_type_subtype == CTRL_CONTROL_WRAPPER0x17) {
16513 hdr_len = 6;
16514 cw_fcf = ctrl_fcf;
16515 } else {
16516 hdr_len = 0;
16517 cw_fcf = fcf;
16518 }
16519 switch (COMPOSE_FRAME_TYPE (cw_fcf)(((((cw_fcf) & 0xC) >> 2) == 0x1 && (((cw_fcf
) & 0xF0) >> 4) == 0x6) ? (((cw_fcf & 0x0C)<<
6) + ((cw_fcf) & 0xF0) + (((cw_fcf) & 0xF00) >>
8)) : (((cw_fcf & 0x0C)<< 2)+(((cw_fcf) & 0xF0
) >> 4)))
) {
16520
16521 case CTRL_BEAMFORM_RPT_POLL0x14:
16522 hdr_len += 17;
16523 break;
16524
16525 case CTRL_VHT_NDP_ANNC0x15:
16526 hdr_len += 17;
16527 /* TODO: for now we only consider a single STA, add support for more */
16528 hdr_len += 2;
16529 break;
16530
16531 case CTRL_CTS0x1C:
16532 case CTRL_ACKNOWLEDGEMENT0x1D:
16533 hdr_len += 10;
16534 break;
16535
16536 case CTRL_POLL0x162:
16537 hdr_len += 18;
16538 break;
16539
16540 case CTRL_SPR0x163:
16541 case CTRL_GRANT0x164:
16542 case CTRL_GRANT_ACK0x167:
16543 hdr_len += 23;
16544 break;
16545
16546 case CTRL_DMG_CTS0x165:
16547 hdr_len += 16;
16548 break;
16549
16550 case CTRL_DMG_DTS0x166:
16551 case CTRL_SSW0x168:
16552 hdr_len += 22;
16553 break;
16554
16555 case CTRL_SSW_FEEDBACK0x169:
16556 case CTRL_SSW_ACK0x16A:
16557 hdr_len += 24;
16558 break;
16559
16560 case CTRL_RTS0x1B:
16561 case CTRL_PS_POLL0x1A:
16562 case CTRL_CFP_END0x1E:
16563 case CTRL_CFP_ENDACK0x1F:
16564 case CTRL_BLOCK_ACK_REQ0x18:
16565 case CTRL_BLOCK_ACK0x19:
16566 hdr_len += 16;
16567 break;
16568
16569 default:
16570 hdr_len += 4; /* XXX */
16571 break;
16572 }
16573 break;
16574
16575 case DATA_FRAME0x02:
16576 hdr_len = (FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8)) == DATA_ADDR_T4((0x01|0x02) << 8)) ? DATA_LONG_HDR_LEN30 : DATA_SHORT_HDR_LEN24;
16577
16578 if ((option_flags & IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004) && DATA_FRAME_IS_QOS(frame_type_subtype)((frame_type_subtype) & 0x08)) {
16579 /* QoS frame */
16580 qosoff = hdr_len;
16581 hdr_len += 2; /* Include the QoS field in the header length */
16582
16583 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x80)
) {
16584 /*
16585 * QoS data frames with the Order bit set have an HT Control field;
16586 * see 8.2.4.1.10 "Order field". If they're not HT frames, they
16587 * should never have the Order bit set.
16588 */
16589 hdr_len += 4;
16590 htc_len = 4;
16591 }
16592
16593 /*
16594 * Does it look as if we have a mesh header?
16595 * Look at the Mesh Control subfield of the QoS field and at the
16596 * purported mesh flag fields.
16597 */
16598 qos_control = tvb_get_letohs(tvb, qosoff);
16599 if (tvb_bytes_exist(tvb, hdr_len, 1)) {
16600 meshoff = hdr_len;
16601 mesh_flags = tvb_get_guint8(tvb, meshoff);
16602 if (has_mesh_control(fcf, qos_control, mesh_flags)) {
16603 /* Yes, add the length of that in as well. */
16604 meshctl_len = find_mesh_control_length(mesh_flags);
16605 hdr_len += meshctl_len;
16606 }
16607 }
16608 }
16609 break;
16610
16611 case EXTENSION_FRAME0x03:
16612 hdr_len = 10;
16613 break;
16614
16615 default:
16616 hdr_len = 4; /* XXX */
16617 break;
16618 }
16619
16620 /*
16621 * Some portions of this code calculate offsets relative to the end of the
16622 * header. But when the header has been padded to align the data this must
16623 * be done relative to true header size, not the padded/aligned value. To
16624 * simplify this work we stash the original header size in ohdr_len instead
16625 * of recalculating it every time we need it.
16626 */
16627 ohdr_len = hdr_len;
16628 if (phdr->datapad) {
16629 /*
16630 * Add in Atheros padding between the 802.11 header and body.
16631 *
16632 * XXX - would the mesh header be part of the header or the body
16633 * from the point of view of the Atheros adapters that insert
16634 * the padding, assuming they even recognize a mesh header?
16635 */
16636 hdr_len = roundup2(hdr_len, 4)(((hdr_len)+((4)-1))&(~((4)-1)));
16637 }
16638
16639 /* Add the FC and duration/id to the current tree */
16640 ti = proto_tree_add_protocol_format (tree, proto_wlan, tvb, 0, hdr_len,
16641 "IEEE 802.11 %s", fts_str);
16642 hdr_tree = proto_item_add_subtree(ti, ett_80211);
16643
16644 dissect_frame_control(hdr_tree, tvb, option_flags, 0, pinfo);
16645 dissect_durid(hdr_tree, tvb, frame_type_subtype, 2);
16646
16647 switch (phdr->fcs_len)
16648 {
16649 case 0: /* Definitely has no FCS */
16650 has_fcs = FALSE(0);
16651 break;
16652
16653 case 4: /* Definitely has an FCS */
16654 has_fcs = TRUE(!(0));
16655 break;
16656
16657 case -2: /* Data frames have no FCS, other frames may have an FCS */
16658 /* XXX: -2 currently used only in wiretap/netmon.c */
16659 if (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2) == DATA_FRAME0x02)
16660 has_fcs = FALSE(0);
16661 else /* Management, Control, Extension */
16662 has_fcs = wlan_check_fcs;
16663 break;
16664
16665 default: /* Don't know - use "wlan_check_fcs" */
16666 has_fcs = wlan_check_fcs;
16667 break;
16668 }
16669
16670 /*
16671 * Decode the part of the frame header that isn't the same for all
16672 * frame types.
16673 */
16674 seq_control = 0;
16675 frag_number = 0;
16676 seq_number = 0;
16677
16678 switch (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2))
16679 {
16680
16681 case MGT_FRAME0x00:
16682 /*
16683 * All management frame types have the same header.
16684 */
16685 set_address_tvb(&pinfo->dl_src, wlan_address_type, 6, tvb, 10);
16686 copy_address_shallow(&pinfo->src, &pinfo->dl_src);
16687 set_address_tvb(&pinfo->dl_dst, wlan_address_type, 6, tvb, 4);
16688 copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
16689
16690 /* for tap */
16691 set_address_tvb(&whdr->bssid, wlan_bssid_address_type, 6, tvb, 16);
16692 copy_address_shallow(&whdr->src, &pinfo->dl_src);
16693 copy_address_shallow(&whdr->dst, &pinfo->dl_dst);
16694
16695 seq_control = tvb_get_letohs(tvb, 22);
16696 frag_number = SEQCTL_FRAGMENT_NUMBER(seq_control)((seq_control) & 0x000F);
16697 seq_number = SEQCTL_SEQUENCE_NUMBER(seq_control)(((seq_control) & 0xFFF0) >> 4);
16698
16699 col_append_fstr(pinfo->cinfo, COL_INFO,
16700 ", SN=%d", seq_number);
16701
16702 col_append_fstr(pinfo->cinfo, COL_INFO,
16703 ", FN=%d", frag_number);
16704
16705 if (tree)
16706 {
16707 const gchar *ra_da_name, *ta_sa_name, *bssid_name;
16708
16709 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ra, tvb, 4, 6, ENC_NA0x00000000);
16710 ra_da_name = tvb_get_ether_name(tvb, 4);
16711 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ra_resolved, tvb, 4, 6, ra_da_name);
16712 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16713 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_da, tvb, 4, 6, ENC_NA0x00000000);
16714 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_da_resolved, tvb, 4, 6, ra_da_name);
16715 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16716 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, 10, 6, ENC_NA0x00000000);
16717 ta_sa_name = tvb_get_ether_name(tvb, 10);
16718 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, 10, 6, ta_sa_name);
16719 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16720 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_sa, tvb, 10, 6, ENC_NA0x00000000);
16721 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_sa_resolved, tvb, 10, 6, ta_sa_name);
16722 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16723 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_bssid, tvb, 16, 6, ENC_NA0x00000000);
16724 bssid_name = tvb_get_ether_name(tvb, 16);
16725 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_bssid_resolved, tvb, 16, 6, bssid_name);
16726 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16727
16728 /* FIXME: With mgmt frames FROM_TO_DS is always 0, perhaps compare address to bssid instead? */
16729 if ((flags & FROM_TO_DS3) == FLAG_FROM_DS0x02) { /* Receiver address */
16730 sta_addr_offset = 4;
16731 } else if ((flags & FROM_TO_DS3) == FLAG_TO_DS0x01) { /* Transmitter address */
16732 sta_addr_offset = 10;
16733 }
16734 if (sta_addr_offset > 0) {
16735 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_staa, tvb, sta_addr_offset, 6, ENC_NA0x00000000);
16736 station_name = tvb_get_ether_name(tvb, sta_addr_offset);
16737 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_staa_resolved, tvb, sta_addr_offset, 6, station_name);
16738 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16739 }
16740 /* add items for wlan.addr filter */
16741 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA0x00000000);
16742 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16743 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, 4, 6, ra_da_name);
16744 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16745 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, 10, 6, ENC_NA0x00000000);
16746 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16747 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, 10, 6, ta_sa_name);
16748 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16749 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, 16, 6, ENC_NA0x00000000);
16750 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16751 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, 16, 6, bssid_name);
16752 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16753 proto_tree_add_item(hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, ENC_LITTLE_ENDIAN0x80000000);
16754 proto_tree_add_item(hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, ENC_LITTLE_ENDIAN0x80000000);
16755 }
16756 break;
16757
16758 case CONTROL_FRAME0x01:
16759 {
16760 /*
16761 * Control Wrapper frames insert themselves between address 1
16762 * and address 2 in a normal control frame. Process address 1
16763 * first, then handle the rest of the frame in dissect_control.
16764 */
16765 if (frame_type_subtype == CTRL_CONTROL_WRAPPER0x17) {
16766 offset = 10; /* FC + D/ID + Address 1 + CFC + HTC */
16767 ctrl_fcf = FETCH_FCF(10)((option_flags & 0x00000001) ? (((guint16) ( (guint16) ((
guint16) (tvb_get_letohs(tvb, 10)) >> 8) | (guint16) ((
guint16) (tvb_get_letohs(tvb, 10)) << 8)))) : tvb_get_letohs
(tvb, 10))
;
16768 ctrl_type_subtype = COMPOSE_FRAME_TYPE(ctrl_fcf)(((((ctrl_fcf) & 0xC) >> 2) == 0x1 && (((ctrl_fcf
) & 0xF0) >> 4) == 0x6) ? (((ctrl_fcf & 0x0C)<<
6) + ((ctrl_fcf) & 0xF0) + (((ctrl_fcf) & 0xF00) >>
8)) : (((ctrl_fcf & 0x0C)<< 2)+(((ctrl_fcf) & 0xF0
) >> 4)))
;
16769 } else {
16770 offset = 10; /* FC + D/ID + Address 1 */
16771 ctrl_type_subtype = frame_type_subtype;
16772 }
16773 /* Added to disallow DMG STA to transfer packets of certain forbidden types. */
16774 switch (ctrl_type_subtype)
16775 {
16776 case CTRL_PS_POLL0x1A:
16777 case CTRL_CTS0x1C:
16778 case CTRL_CFP_ENDACK0x1F:
16779 if(isDMG == TRUE(!(0))) {
16780 expert_add_info_format(pinfo, hdr_tree, &ei_ieee80211_dmg_subtype,
16781 "DMG STA shouldn't transmit control frame of type contention-free period end+ack");
16782 }
16783 break;
16784 default:
16785 break;
16786 }
16787
16788 switch (ctrl_type_subtype)
16789 {
16790 case CTRL_PS_POLL0x1A:
16791 addr1_str = "BSSID";
16792 addr1_hf = hf_ieee80211_addr_bssid;
16793 addr1_hf_resolved = hf_ieee80211_addr_bssid_resolved;
16794
16795 break;
16796 case CTRL_BEAMFORM_RPT_POLL0x14:
16797 case CTRL_VHT_NDP_ANNC0x15:
16798 case CTRL_RTS0x1B:
16799 case CTRL_POLL0x162:
16800 case CTRL_SPR0x163:
16801 case CTRL_GRANT0x164:
16802 case CTRL_DMG_CTS0x165:
16803 case CTRL_DMG_DTS0x166:
16804 case CTRL_GRANT_ACK0x167:
16805 case CTRL_SSW0x168:
16806 case CTRL_SSW_FEEDBACK0x169:
16807 case CTRL_SSW_ACK0x16A:
16808 case CTRL_CTS0x1C:
16809 case CTRL_ACKNOWLEDGEMENT0x1D:
16810 case CTRL_CFP_END0x1E:
16811 case CTRL_CFP_ENDACK0x1F:
16812 case CTRL_BLOCK_ACK_REQ0x18:
16813 case CTRL_BLOCK_ACK0x19:
16814 addr1_str = "RA";
16815 addr1_hf = hf_ieee80211_addr_ra;
16816 addr1_hf_resolved = hf_ieee80211_addr_ra_resolved;
16817 break;
16818 default:
16819 break;
16820 }
16821
16822 if (!addr1_str) /* XXX - Should we throw some sort of error? */
16823 break;
16824
16825 /* Add address 1 */
16826 set_dst_addr_cols(pinfo, tvb, 4, addr1_str);
16827 if (tree) {
16828 const gchar *ether_name = tvb_get_ether_name(tvb, 4);
16829 proto_tree_add_item(hdr_tree, addr1_hf, tvb, 4, 6, ENC_NA0x00000000);
16830 hidden_item = proto_tree_add_string(hdr_tree, addr1_hf_resolved, tvb, 4, 6, ether_name);
16831 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16832 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA0x00000000);
16833 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16834 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, 4, 6, ether_name);
16835 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16836 }
16837
16838 /*
16839 * Start shoving in other fields if needed.
16840 */
16841 if (frame_type_subtype == CTRL_CONTROL_WRAPPER0x17) {
16842 /* if (tree) */
16843 {
16844 cw_tree = proto_tree_add_subtree(hdr_tree, tvb, offset, 2,
16845 ett_cntrl_wrapper_fc, NULL((void*)0), "Contained Frame Control");
16846 dissect_frame_control(cw_tree, tvb, 0, offset, pinfo);
16847 dissect_ht_control(hdr_tree, tvb, offset + 2);
16848 offset += 6;
16849 hdr_tree = proto_tree_add_subtree(hdr_tree, tvb, offset, 2,
16850 ett_cntrl_wrapper_fc, &cw_item, "Carried Frame");
16851 if (isDMG) {
16852 expert_add_info_format(pinfo, cw_item, &ei_ieee80211_dmg_subtype,
16853 "DMG STA shouldn't transmit Control Wrapper frame");
16854 }
16855 }
16856 }
16857
16858 switch (ctrl_type_subtype)
16859 {
16860 case CTRL_PS_POLL0x1A:
16861 case CTRL_CFP_ENDACK0x1F:
16862 {
16863 set_src_addr_cols(pinfo, tvb, offset, "BSSID");
16864 /* if (tree) */
16865 {
16866 const gchar *ether_name = tvb_get_ether_name(tvb, offset);
16867 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA0x00000000);
16868 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, offset, 6, ether_name);
16869 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16870 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA0x00000000);
16871 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16872 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, offset, 6, ether_name);
16873 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16874 offset += 6;
16875 }
16876 break;
16877 }
16878
16879 case CTRL_CFP_END0x1E:
16880 {
16881 if (isDMG)
16882 set_src_addr_cols(pinfo, tvb, offset, "TA");
16883 else
16884 set_src_addr_cols(pinfo, tvb, offset, "BSSID");
16885 /* if (tree) */
16886 {
16887 const gchar *ether_name = tvb_get_ether_name(tvb, offset);
16888 if (isDMG) {
16889 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA0x00000000);
16890 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, offset, 6, ether_name);
16891 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16892 } else {
16893 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_bssid, tvb, offset, 6, ENC_NA0x00000000);
16894 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_bssid_resolved, tvb, offset, 6, ether_name);
16895 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16896 }
16897 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA0x00000000);
16898 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16899 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, offset, 6, ether_name);
16900 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16901 offset += 6;
16902 }
16903 break;
16904 }
16905
16906 case CTRL_BEAMFORM_RPT_POLL0x14:
16907 {
16908 set_src_addr_cols(pinfo, tvb, offset, "TA");
16909 /* if (tree) */
16910 {
16911 const gchar *ether_name = tvb_get_ether_name(tvb, offset);
16912
16913 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA0x00000000);
16914 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, offset, 6, ether_name);
16915 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16916 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA0x00000000);
16917 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16918 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, offset, 6, ether_name);
16919 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16920 offset += 6;
16921
16922 proto_tree_add_item(hdr_tree, hf_ieee80211_beamform_feedback_seg_retrans_bitmap, tvb, offset, 1, ENC_NA0x00000000);
16923 }
16924 break;
16925 }
16926
16927 case CTRL_VHT_NDP_ANNC0x15:
16928 {
16929 set_src_addr_cols(pinfo, tvb, offset, "TA");
16930 /* if (tree) */
16931 {
16932 guint16 sta_info;
16933 guint8 len_fcs = 0;
16934 proto_tree *dialog_token_tree;
16935 proto_item *dialog_token_item;
16936 proto_tree *sta_info_tree;
16937 proto_item *sta_info_item;
16938 const gchar *ether_name = tvb_get_ether_name(tvb, offset);
16939
16940 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA0x00000000);
16941 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, offset, 6, ether_name);
16942 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16943 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA0x00000000);
16944 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16945 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, offset, 6, ether_name);
16946 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
16947 offset += 6;
16948
16949 dialog_token_item = proto_tree_add_item(hdr_tree, hf_ieee80211_vht_ndp_annc_token,
16950 tvb, offset, 1, ENC_NA0x00000000);
16951 dialog_token_tree = proto_item_add_subtree(dialog_token_item, ett_vht_ndp_annc_token_tree);
16952 proto_tree_add_item(dialog_token_tree, hf_ieee80211_vht_ndp_annc_token_number,
16953 tvb, offset, 1, ENC_NA0x00000000);
16954 proto_tree_add_item(dialog_token_tree, hf_ieee80211_vht_ndp_annc_token_reserved,
16955 tvb, offset, 1, ENC_NA0x00000000);
16956 offset++;
16957
16958 /* Check if there is FCS in the packet */
16959 if(has_fcs){
16960 len_fcs = 4;
16961 }
16962 while (tvb_reported_length_remaining(tvb, offset) > len_fcs) {
16963 sta_info_item = proto_tree_add_item(hdr_tree, hf_ieee80211_vht_ndp_annc_sta_info,
16964 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
16965 sta_info_tree = proto_item_add_subtree(sta_info_item, ett_vht_ndp_annc_sta_info_tree);
16966 proto_tree_add_item(sta_info_tree, hf_ieee80211_vht_ndp_annc_sta_info_aid12,
16967 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
16968 proto_tree_add_item(sta_info_tree, hf_ieee80211_vht_ndp_annc_sta_info_feedback_type,
16969 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
16970
16971 sta_info = tvb_get_letohs(tvb, offset);
16972
16973 if (sta_info & 0x0010)
16974 proto_tree_add_uint(sta_info_tree,
16975 hf_ieee80211_vht_ndp_annc_sta_info_nc_index,
16976 tvb, offset, 2, sta_info);
16977 else
16978 proto_tree_add_item(sta_info_tree, hf_ieee80211_vht_ndp_annc_sta_info_reserved,
16979 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
16980 offset += 2;
16981 }
16982 }
16983 break;
16984 }
16985
16986 case CTRL_GRANT_ACK0x167:
16987 case CTRL_SSW0x168:
16988 case CTRL_SSW_FEEDBACK0x169:
16989 case CTRL_SSW_ACK0x16A:
16990 case CTRL_DMG_CTS0x165:
16991 case CTRL_GRANT0x164:
16992 case CTRL_SPR0x163:
16993 case CTRL_POLL0x162:
16994 case CTRL_RTS0x1B:
16995 {
16996 set_src_addr_cols(pinfo, tvb, offset, "TA");
16997 /* if (tree) */
16998 {
16999 const gchar *ether_name = tvb_get_ether_name(tvb, offset);
17000 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA0x00000000);
17001 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, offset, 6, ether_name);
17002 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17003 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA0x00000000);
17004 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17005 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, offset, 6, ether_name);
17006 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17007 offset += 6;
17008 }
17009 break;
17010 }
17011
17012 case CTRL_CONTROL_WRAPPER0x17:
17013 {
17014 /* XXX - We shouldn't see this. Should we throw an error? */
17015 break;
17016 }
17017
17018 case CTRL_BLOCK_ACK_REQ0x18:
17019 {
17020 set_src_addr_cols(pinfo, tvb, offset, "TA");
17021
17022 /* if (tree) */
17023 {
17024 guint16 bar_control;
17025 guint8 block_ack_type;
17026 proto_item *bar_parent_item;
17027 proto_tree *bar_sub_tree;
17028 const gchar *ether_name = tvb_get_ether_name(tvb, offset);
17029
17030 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA0x00000000);
17031 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, offset, 6, ether_name);
17032 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17033 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA0x00000000);
17034 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17035 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, offset, 6, ether_name);
17036 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17037 offset += 6;
17038
17039 bar_control = tvb_get_letohs(tvb, offset);
17040 /* According to the 802.11ad standard (28/12/12) there is need to find the
17041 * GCR subfield which isn't described, thus the black_ack_type calculations
17042 * should be changed.
17043 */
17044 block_ack_type = (bar_control & 0x0006) >> 1;
17045 proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_request_type, tvb,
17046 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17047 bar_parent_item = proto_tree_add_item(hdr_tree,
17048 hf_ieee80211_block_ack_request_control, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17049 bar_sub_tree = proto_item_add_subtree(bar_parent_item,
17050 ett_block_ack);
17051 proto_tree_add_item(bar_sub_tree,
17052 hf_ieee80211_block_ack_control_ack_policy, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17053 proto_tree_add_item(bar_sub_tree, hf_ieee80211_block_ack_control_multi_tid,
17054 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17055 proto_tree_add_item(bar_sub_tree,
17056 hf_ieee80211_block_ack_control_compressed_bitmap, tvb, offset, 2,
17057 ENC_LITTLE_ENDIAN0x80000000);
17058 proto_tree_add_item(bar_sub_tree, hf_ieee80211_block_ack_control_reserved,
17059 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17060
17061 switch (block_ack_type)
17062 {
17063 case 0: /*Basic BlockAckReq */
17064 {
17065 if(isDMG == TRUE(!(0))) {
17066 expert_add_info_format(pinfo, bar_sub_tree, &ei_ieee80211_dmg_subtype,
17067 "DMG STA shouldn't transmit BlockAckReq frame with Basic BlockAckReq");
17068 break;
17069 }
17070 proto_tree_add_item(bar_sub_tree,
17071 hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17072 offset += 2;
17073
17074 /*offset +=*/ add_ff_block_ack_ssc(hdr_tree, tvb, pinfo, offset);
17075 break;
17076 }
17077 case 1: /* Extended Compressesd BlockAckReq */
17078 if(isDMG == FALSE(0)) {
17079 expert_add_info_format(pinfo, bar_sub_tree, &ei_ieee80211_dmg_subtype,
17080 "Non-DMG STA shouldn't transmit BlockAckReq frame with Extended Compressed BlockAckReq");
17081 break;
17082 }
17083 case 2: /* Compressed BlockAckReq */
17084 {
17085 proto_tree_add_item(bar_sub_tree,
17086 hf_ieee80211_block_ack_control_compressed_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17087 offset += 2;
17088
17089 /*offset +=*/ add_ff_block_ack_ssc(hdr_tree, tvb, pinfo, offset);
17090 break;
17091 }
17092 case 3: /* Multi-TID BlockAckReq */
17093 {
17094 guint8 tid_count;
17095 guint iii;
17096 proto_tree *bar_mtid_tree, *bar_mtid_sub_tree;
17097
17098 if(isDMG == TRUE(!(0))) {
17099 expert_add_info_format(pinfo, bar_sub_tree, &ei_ieee80211_dmg_subtype,
17100 "DMG STA shouldn't transmit BlockAckReq frame with Basic BlockAckReq");
17101 break;
17102 }
17103
17104 tid_count = ((bar_control & 0xF000) >> 12) + 1;
17105 proto_tree_add_uint(bar_sub_tree, hf_ieee80211_block_ack_control_multi_tid_info, tvb, offset, 2, tid_count);
17106 offset += 2;
17107
17108 bar_mtid_tree = proto_tree_add_subtree(hdr_tree, tvb, offset, tid_count*4, ett_block_ack, NULL((void*)0), "Per TID Info");
17109 for (iii = 0; iii < tid_count; iii++) {
17110 bar_parent_item = proto_tree_add_uint(bar_mtid_tree, hf_ieee80211_block_ack_multi_tid_info, tvb, offset, 4, iii);
17111 bar_mtid_sub_tree = proto_item_add_subtree(bar_parent_item, ett_block_ack);
17112
17113 proto_tree_add_item(bar_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17114 proto_tree_add_item(bar_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_value, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17115 offset += 2;
17116
17117 offset += add_ff_block_ack_ssc(bar_mtid_sub_tree, tvb, pinfo, offset);
17118 }
17119 break;
17120 }
17121 }
17122 }
17123 break;
17124 }
17125
17126 case CTRL_BLOCK_ACK0x19:
17127 {
17128 set_src_addr_cols(pinfo, tvb, offset, "TA");
17129
17130 /* if (tree) */
17131 {
17132 guint16 ba_control;
17133 guint8 block_ack_type;
17134 proto_item *ba_parent_item;
17135 proto_tree *ba_sub_tree;
17136 const gchar *ether_name = tvb_get_ether_name(tvb, offset);
17137
17138 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA0x00000000);
17139 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, offset, 6, ether_name);
17140 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17141 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA0x00000000);
17142 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17143 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, offset, 6, ether_name);
17144 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17145 offset += 6;
17146
17147 ba_control = tvb_get_letohs(tvb, offset);
17148 block_ack_type = (ba_control & 0x0006) >> 1;
17149 proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_type, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17150 ba_parent_item = proto_tree_add_item(hdr_tree,
17151 hf_ieee80211_block_ack_control, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17152 ba_sub_tree = proto_item_add_subtree(ba_parent_item, ett_block_ack);
17153 proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_control_ack_policy,
17154 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17155 proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_control_multi_tid,
17156 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17157 proto_tree_add_item(ba_sub_tree,
17158 hf_ieee80211_block_ack_control_compressed_bitmap, tvb, offset, 2,
17159 ENC_LITTLE_ENDIAN0x80000000);
17160 proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_control_reserved, tvb,
17161 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17162
17163 switch (block_ack_type)
17164 {
17165 case 0: /*Basic BlockAck */
17166 {
17167 proto_tree_add_item(ba_sub_tree,
17168 hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17169 offset += 2;
17170
17171 offset += add_ff_block_ack_ssc(hdr_tree, tvb, pinfo, offset);
17172 proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 128, ENC_NA0x00000000);
17173 /*offset += 128;*/
17174 break;
17175 }
17176 /* Added to support Extended Compressed BlockAck RBUFCAP subfield.*/
17177 case 1: /* Extended Compressed BlockAck */
17178 {
17179 guint16 ssn;
17180 guint64 bmap;
17181 int f;
17182 proto_item *ba_bitmap_item;
17183 proto_tree *ba_bitmap_tree;
17184 if(isDMG == FALSE(0)) {
17185 expert_add_info_format(pinfo, ba_sub_tree, &ei_ieee80211_dmg_subtype,
17186 "Non-DMG STA shouldn't transmit BlockAck frame with Extended Compressed BlockAck");
17187 break;
17188 }
17189 proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17190 offset += 2;
17191
17192 ssn = tvb_get_letohs(tvb, offset);
17193 ssn >>= 4;
17194 offset += add_ff_block_ack_ssc(hdr_tree, tvb, pinfo, offset);
17195 bmap = tvb_get_letoh64(tvb, offset);
17196 ba_bitmap_item = proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA0x00000000);
17197 ba_bitmap_tree = proto_item_add_subtree(ba_bitmap_item, ett_block_ack_bitmap);
17198 for (f = 0; f < 64; f++) {
17199 if (bmap & (G_GUINT64_CONSTANT(1)(1UL) << f))
17200 continue;
17201 proto_tree_add_uint_format_value(ba_bitmap_tree, hf_ieee80211_block_ack_bitmap_missing_frame,
17202 tvb, offset + (f/8), 1, ssn + f, "%u", ssn + f);
17203 }
17204 offset += 8;
17205 proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_RBUFCAP, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
17206 offset += 1;
17207 break;
17208 }
17209 case 2: /* Compressed BlockAck */
17210 {
17211 guint16 ssn;
17212 guint64 bmap;
17213 int f;
17214 proto_item *ba_bitmap_item;
17215 proto_tree *ba_bitmap_tree;
17216
17217 proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17218 offset += 2;
17219
17220 ssn = tvb_get_letohs(tvb, offset);
17221 ssn >>= 4;
17222 offset += add_ff_block_ack_ssc(hdr_tree, tvb, pinfo, offset);
17223 bmap = tvb_get_letoh64(tvb, offset);
17224 ba_bitmap_item = proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA0x00000000);
17225 ba_bitmap_tree = proto_item_add_subtree(ba_bitmap_item, ett_block_ack_bitmap);
17226 for (f = 0; f < 64; f++) {
17227 if (bmap & (G_GUINT64_CONSTANT(1)(1UL) << f))
17228 continue;
17229 proto_tree_add_uint_format_value(ba_bitmap_tree, hf_ieee80211_block_ack_bitmap_missing_frame,
17230 tvb, offset + (f/8), 1, ssn + f, "%u", (ssn + f) & 0x0fff);
17231 }
17232 /*offset += 8;*/
17233 break;
17234 }
17235 case 3: /* Multi-TID BlockAck */
17236 {
17237 guint8 tid_count;
17238 guint iii;
17239 proto_tree *ba_mtid_tree, *ba_mtid_sub_tree;
17240
17241 tid_count = ((ba_control & 0xF000) >> 12) + 1;
17242 proto_tree_add_uint(ba_sub_tree,
17243 hf_ieee80211_block_ack_control_compressed_tid_info, tvb, offset, 2, tid_count);
17244 offset += 2;
17245
17246 ba_mtid_tree = proto_tree_add_subtree(hdr_tree, tvb, offset, tid_count*4, ett_block_ack, NULL((void*)0), "Per TID Info");
17247 for (iii = 0; iii < tid_count; iii++) {
17248 ba_parent_item = proto_tree_add_uint(ba_mtid_tree, hf_ieee80211_block_ack_multi_tid_info, tvb, offset, 4, iii);
17249 ba_mtid_sub_tree = proto_item_add_subtree(ba_parent_item, ett_block_ack);
17250
17251 proto_tree_add_item(ba_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17252 proto_tree_add_item(ba_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_value, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17253 offset += 2;
17254
17255 offset += add_ff_block_ack_ssc(ba_mtid_sub_tree, tvb, pinfo, offset);
17256 proto_tree_add_item(ba_mtid_sub_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA0x00000000);
17257 offset += 8;
17258 }
17259 break;
17260 }
17261 }
17262 }
17263 break;
17264 }
17265 }
17266/*
17267 * 802.11ad : Used for extension types.
17268 */
17269 switch (ctrl_type_subtype) {
17270 case CTRL_POLL0x162: {
17271 proto_tree_add_item(hdr_tree, hf_ieee80211_cf_response_offset,
17272 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17273 /* offset += 2; commented to avoid Clang warnings*/
17274 break;
17275 }
17276 case CTRL_GRANT0x164:
17277 case CTRL_GRANT_ACK0x167:
17278 case CTRL_SPR0x163: {
17279 gboolean isGrant;
17280 if(ctrl_type_subtype != CTRL_GRANT_ACK0x167) {
17281 offset += add_ff_dynamic_allocation(hdr_tree, tvb, pinfo, offset);
17282 } else { /* CTRL_GRANT_ACK have 5 octets that are reserved thus not shown.*/
17283 offset += 5;
17284 }
17285 /* offset += commented to avoid Clang warnings*/
17286 isGrant = ((ctrl_type_subtype==CTRL_GRANT0x164)||(ctrl_type_subtype==CTRL_GRANT_ACK0x167));
17287 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_CTRL_GRANT_OR_GRANT_ACK_KEY2, &isGrant);
17288 add_ff_beamforming_ctrl(hdr_tree, tvb, pinfo, offset);
17289 break;
17290 }
17291 case CTRL_SSW0x168: {
17292 offset += add_ff_sector_sweep(hdr_tree, tvb, pinfo, offset);
17293 /* offset += commented to avoid Clang warnings*/
17294 add_ff_sector_sweep_feedback(hdr_tree, tvb, pinfo, offset);
17295 break;
17296 }
17297 case CTRL_SSW_ACK0x16A:
17298 case CTRL_SSW_FEEDBACK0x169: {
17299 offset += add_ff_sector_sweep_feedback(hdr_tree, tvb, pinfo, offset);
17300 offset += add_ff_BRP_request(hdr_tree, tvb, pinfo, offset);
17301 /* offset += commented to avoid Clang warnings*/
17302 add_ff_beamformed_link(hdr_tree, tvb, pinfo, offset);
17303 break;
17304 }
17305 case CTRL_DMG_DTS0x166: {
17306 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_nav_sa, tvb, offset, 6, ENC_NA0x00000000);
17307 offset += 6;
17308 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_nav_da, tvb, offset, 6, ENC_NA0x00000000);
17309 /* offset += 6; commented to avoid Clang warnings*/
17310 break;
17311 }
17312 default:
17313 break;
17314 }
17315 break;
17316 }
17317
17318 case DATA_FRAME0x02:
17319 {
17320 guint32 ra_offset, da_offset, sa_offset, ta_offset, bssid_offset;
17321 addr_type = FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8));
17322
17323 /* In order to show src/dst address we must always do the following */
17324 switch (addr_type)
17325 {
17326
17327 case DATA_ADDR_T10:
17328 ra_offset = 4;
17329 da_offset = 4;
17330 sa_offset = 10;
17331 ta_offset = 10;
17332 bssid_offset = 16;
17333 break;
17334
17335 case DATA_ADDR_T2(0x02 << 8):
17336 ra_offset = 4;
17337 da_offset = 4;
17338 sa_offset = 16;
17339 ta_offset = 10;
17340 bssid_offset = 10;
17341 break;
17342
17343 case DATA_ADDR_T3(0x01 << 8):
17344 ra_offset = 4;
17345 da_offset = 16;
17346 sa_offset = 10;
17347 ta_offset = 10;
17348 bssid_offset = 4;
17349 break;
17350
17351 case DATA_ADDR_T4((0x01|0x02) << 8):
17352 ra_offset = 4;
17353 da_offset = 16;
17354 sa_offset = 24;
17355 ta_offset = 10;
17356 bssid_offset = 10;
17357 break;
17358
17359 default:
17360 /* Should never happen? */
17361 ra_offset = 0;
17362 da_offset = 0;
17363 sa_offset = 0;
17364 ta_offset = 0;
17365 bssid_offset = 0;
17366 break;
17367 }
17368
17369
17370
17371 set_address_tvb(&pinfo->dl_src, wlan_address_type, 6, tvb, sa_offset);
17372 copy_address_shallow(&pinfo->src, &pinfo->dl_src);
17373 set_address_tvb(&pinfo->dl_dst, wlan_address_type, 6, tvb, da_offset);
17374 copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
17375
17376 /* for tap */
17377 set_address_tvb(&whdr->bssid, wlan_bssid_address_type, 6, tvb, bssid_offset);
17378
17379 copy_address_shallow(&whdr->src, &pinfo->dl_src);
17380 copy_address_shallow(&whdr->dst, &pinfo->dl_dst);
17381
17382 seq_control = tvb_get_letohs(tvb, 22);
17383 frag_number = SEQCTL_FRAGMENT_NUMBER(seq_control)((seq_control) & 0x000F);
17384 seq_number = SEQCTL_SEQUENCE_NUMBER(seq_control)(((seq_control) & 0xFFF0) >> 4);
17385
17386 col_append_fstr(pinfo->cinfo, COL_INFO,
17387 ", SN=%d, FN=%d", seq_number, frag_number);
17388
17389 /* Now if we have a tree we start adding stuff */
17390 if (tree)
17391 {
17392 const gchar *ra_name, *ta_name, *sa_name, *da_name, *bssid_name = NULL((void*)0);
17393
17394 switch (addr_type)
17395 {
17396 case DATA_ADDR_T10:
17397 case DATA_ADDR_T2(0x02 << 8):
17398 case DATA_ADDR_T3(0x01 << 8):
17399 case DATA_ADDR_T4((0x01|0x02) << 8):
17400 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ra, tvb, ra_offset, 6, ENC_NA0x00000000);
17401 ra_name = tvb_get_ether_name(tvb, ra_offset);
17402 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ra_resolved, tvb, ra_offset, 6, ra_name);
17403 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17404
17405 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_da, tvb, da_offset, 6, ENC_NA0x00000000);
17406 da_name = tvb_get_ether_name(tvb, da_offset);
17407 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_da_resolved, tvb, da_offset, 6, da_name);
17408 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17409
17410 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, ta_offset, 6, ENC_NA0x00000000);
17411 ta_name = tvb_get_ether_name(tvb, ta_offset);
17412 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, ta_offset, 6, ta_name);
17413 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17414
17415 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_sa, tvb, sa_offset, 6, ENC_NA0x00000000);
17416 sa_name = tvb_get_ether_name(tvb, sa_offset);
17417 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_sa_resolved, tvb, sa_offset, 6, sa_name);
17418 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17419
17420 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_bssid, tvb, bssid_offset, 6, ENC_NA0x00000000);
17421 bssid_name = tvb_get_ether_name(tvb, bssid_offset);
17422 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_bssid_resolved, tvb, bssid_offset, 6, bssid_name);
17423 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17424
17425 if ((flags & FROM_TO_DS3) == FLAG_FROM_DS0x02) { /* Receiver address */
17426 sta_addr_offset = ra_offset;
17427 } else if ((flags & FROM_TO_DS3) == FLAG_TO_DS0x01) { /* Transmitter address */
17428 sta_addr_offset = ta_offset;
17429 }
17430 if (sta_addr_offset > 0) {
17431 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_staa, tvb, sta_addr_offset, 6, ENC_NA0x00000000);
17432 station_name = tvb_get_ether_name(tvb, sta_addr_offset);
17433 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_staa_resolved, tvb, sta_addr_offset, 6, station_name);
17434 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17435 }
17436 proto_tree_add_item(hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, ENC_LITTLE_ENDIAN0x80000000);
17437 proto_tree_add_item(hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, ENC_LITTLE_ENDIAN0x80000000);
17438
17439 /* add items for wlan.addr filter */
17440 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, ra_offset, 6, ENC_NA0x00000000);
17441 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17442 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, ra_offset, 6, ra_name);
17443 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17444 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, ta_offset, 6, ENC_NA0x00000000);
17445 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17446 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, ta_offset, 6, ta_name);
17447 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17448 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, sa_offset, 6, ENC_NA0x00000000);
17449 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17450 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, sa_offset, 6, sa_name);
17451 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17452 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, da_offset, 6, ENC_NA0x00000000);
17453 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17454 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, da_offset, 6, da_name);
17455 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17456 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, bssid_offset, 6, ENC_NA0x00000000);
17457 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17458 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, bssid_offset, 6, bssid_name);
17459 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17460 break;
17461 }
17462
17463 }
17464 break;
17465 }
17466 case EXTENSION_FRAME0x03: {
17467 switch (frame_type_subtype) {
17468 case EXTENSION_DMG_BEACON0x30: {
17469 set_dst_addr_cols(pinfo, tvb, 4, "BSSID");
17470 if (tree) {
17471 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_bssid, tvb, 4, 6, ENC_NA0x00000000);
17472 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA0x00000000);
17473 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
17474 }
17475 break;
17476 }
17477 }
17478 }
17479 }
17480
17481 len = tvb_captured_length_remaining(tvb, hdr_len);
17482 reported_len = tvb_reported_length_remaining(tvb, hdr_len);
17483
17484 if (has_fcs)
17485 {
17486 /*
17487 * Well, this packet should, in theory, have an FCS.
17488 * Do we have the entire packet, and does it have enough data for
17489 * the FCS?
17490 */
17491 if (reported_len < 4)
17492 {
17493 /*
17494 * The packet is claimed not to even have enough data for a 4-byte
17495 * FCS.
17496 * Pretend it doesn't have an FCS.
17497 */
17498 ;
17499 }
17500 else if (len < reported_len)
17501 {
17502 /*
17503 * The packet is claimed to have enough data for a 4-byte FCS, but
17504 * we didn't capture all of the packet.
17505 * Slice off the 4-byte FCS from the reported length, and trim the
17506 * captured length so it's no more than the reported length; that
17507 * will slice off what of the FCS, if any, is in the captured
17508 * length.
17509 */
17510 reported_len -= 4;
17511 if (len > reported_len)
17512 len = reported_len;
17513 }
17514 else
17515 {
17516 /*
17517 * We have the entire packet, and it includes a 4-byte FCS.
17518 * Slice it off, and put it into the tree.
17519 */
17520 len -= 4;
17521 reported_len -= 4;
17522 if (wlan_check_checksum)
17523 {
17524 guint32 sent_fcs = tvb_get_letohl(tvb, hdr_len + len);
17525 guint32 fcs;
17526
17527 if (phdr->datapad)
17528 fcs = crc32_802_tvb_padded(tvb, ohdr_len, hdr_len, len);
17529 else
17530 fcs = crc32_ccitt_tvb(tvb, hdr_len + len);
17531 if (fcs != sent_fcs) {
17532 flag_str[8] = '.';
17533 }
17534
17535 proto_tree_add_checksum(hdr_tree, tvb, hdr_len + len, hf_ieee80211_fcs, hf_ieee80211_fcs_status, NULL((void*)0), pinfo, fcs, ENC_LITTLE_ENDIAN0x80000000, PROTO_CHECKSUM_VERIFY0x01);
17536 } else {
17537 proto_tree_add_checksum(hdr_tree, tvb, hdr_len + len, hf_ieee80211_fcs, hf_ieee80211_fcs_status, NULL((void*)0), pinfo, 0, ENC_LITTLE_ENDIAN0x80000000, PROTO_CHECKSUM_NO_FLAGS0x00);
17538 }
17539 }
17540 }
17541 else
17542 {
17543 flag_str[8] = '\0';
17544 }
17545
17546 proto_item_append_text(ti, ", Flags: %s", flag_str);
17547 col_append_fstr(pinfo->cinfo, COL_INFO, ", Flags=%s", flag_str);
17548
17549
17550 /*
17551 * Only management and data frames have a body, so we don't have
17552 * anything more to do for other types of frames.
17553 */
17554 switch (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2))
17555 {
17556
17557 case MGT_FRAME0x00:
17558 if (htc_len == 4) {
17559 dissect_ht_control(hdr_tree, tvb, ohdr_len - 4);
17560 }
17561 break;
17562
17563 case DATA_FRAME0x02:
17564 if ((option_flags & IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004) && tree && DATA_FRAME_IS_QOS(frame_type_subtype)((frame_type_subtype) & 0x08))
17565 {
17566 proto_item *qos_fields, *qos_ti;
17567 proto_tree *qos_tree;
17568
17569 guint16 qos_eosp;
17570 guint16 qos_field_content;
17571
17572 qos_fields = proto_tree_add_item(hdr_tree, hf_ieee80211_qos, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
17573 qos_tree = proto_item_add_subtree(qos_fields, ett_qos_parameters);
17574
17575 qos_eosp = QOS_EOSP(qos_control)(((qos_control) & 0x0010) >> 4);
17576 qos_field_content = QOS_FIELD_CONTENT(qos_control)(((qos_control) & 0xFF00) >> 8);
17577
17578 proto_tree_add_item(qos_tree, hf_ieee80211_qos_tid, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
17579
17580 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_priority, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
17581 PROTO_ITEM_SET_GENERATED(qos_ti)do { if (qos_ti) do { if (((qos_ti)->finfo)) (((qos_ti)->
finfo))->flags = (((qos_ti)->finfo))->flags | (0x00000002
); } while(0); } while(0)
;
17582
17583 if (flags & FLAG_TO_DS0x01) {
17584 proto_tree_add_item(qos_tree, hf_ieee80211_qos_bit4, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
17585 } else {
17586 proto_tree_add_item(qos_tree, hf_ieee80211_qos_eosp, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
17587 }
17588
17589 proto_tree_add_item(qos_tree, hf_ieee80211_qos_ack_policy, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
17590
17591 if (flags & FLAG_FROM_DS0x02) {
17592 if (!DATA_FRAME_IS_NULL(frame_type_subtype)((frame_type_subtype) & 0x04)) {
17593 proto_tree_add_item(qos_tree, hf_ieee80211_qos_amsdu_present, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
17594 is_amsdu = QOS_AMSDU_PRESENT(qos_control)(((qos_control) & 0x0080) >> 6);
17595 }
17596 if (DATA_FRAME_IS_CF_POLL(frame_type_subtype)((frame_type_subtype) & 0x02)) {
17597 /* txop limit */
17598 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_txop_limit, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
17599 if (qos_field_content == 0) {
17600 proto_item_append_text(qos_ti, " (transmit one frame immediately)");
17601 }
17602 } else {
17603 /* qap ps buffer state */
17604 proto_item *qos_ps_buf_state_fields;
17605 proto_tree *qos_ps_buf_state_tree;
17606
17607 qos_ps_buf_state_fields = proto_tree_add_item(qos_tree, hf_ieee80211_qos_ps_buf_state, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
17608 qos_ps_buf_state_tree = proto_item_add_subtree(qos_ps_buf_state_fields, ett_qos_ps_buf_state);
17609
17610 proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_buf_state_indicated, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
17611
17612 if (QOS_PS_BUF_STATE_INDICATED(qos_field_content)(((qos_field_content) & 0x02) >> 1)) {
17613 proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_highest_pri_buf_ac, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
17614 qos_ti = proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_qap_buf_load, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
17615 switch (QOS_PS_QAP_BUF_LOAD(qos_field_content)(((qos_field_content) & 0xF0) >> 4)) {
17616
17617 case 0:
17618 proto_item_append_text(qos_ti, " (no buffered traffic)");
17619 break;
17620
17621 default:
17622 proto_item_append_text(qos_ti, " (%d octets)", QOS_PS_QAP_BUF_LOAD(qos_field_content)(((qos_field_content) & 0xF0) >> 4)*4096);
17623 break;
17624
17625 case 15:
17626 proto_item_append_text(qos_ti, " (greater than 57344 octets)");
17627 break;
17628 }
17629
17630 }
17631 }
17632 } else {
17633 if (!DATA_FRAME_IS_NULL(frame_type_subtype)((frame_type_subtype) & 0x04)) {
17634 proto_tree_add_item(qos_tree, hf_ieee80211_qos_amsdu_present, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
17635 is_amsdu = QOS_AMSDU_PRESENT(qos_control)(((qos_control) & 0x0080) >> 6);
17636 }
17637 if (qos_eosp) {
17638 /* queue size */
17639 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_queue_size, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
17640 switch (qos_field_content) {
17641 case 0:
17642 proto_item_append_text(qos_ti, " (no buffered traffic in the queue)");
17643 break;
17644
17645 default:
17646 proto_item_append_text(qos_ti, " (%u bytes)", qos_field_content*256);
17647 break;
17648
17649 case 254:
17650 proto_item_append_text(qos_ti, " (more than 64768 octets)");
17651 break;
17652
17653 case 255:
17654 proto_item_append_text(qos_ti, " (unspecified or unknown)");
17655 break;
17656 }
17657 } else {
17658 /* txop duration requested */
17659 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_txop_dur_req,
17660 tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
17661 if (qos_field_content == 0) {
17662 proto_item_append_text(qos_ti, " (no TXOP requested)");
17663 }
17664 }
17665 }
17666
17667 /* Do we have +HTC? */
17668 if (htc_len == 4) {
17669 dissect_ht_control(hdr_tree, tvb, ohdr_len - 4);
17670 }
17671
17672 if (meshctl_len != 0) {
17673 proto_item *msh_fields;
17674 proto_tree *msh_tree;
17675
17676 msh_fields = proto_tree_add_item(hdr_tree, hf_ieee80211_mesh_control_field, tvb, meshoff, meshctl_len, ENC_NA0x00000000);
17677 msh_tree = proto_item_add_subtree(msh_fields, ett_msh_control);
17678 add_ff_mesh_control(msh_tree, tvb, pinfo, meshoff);
17679 }
17680
17681 } /* end of qos control field */
17682 if (enable_decryption && !pinfo->fd->flags.visited) {
17683 const guint8 *enc_data = tvb_get_ptr(tvb, 0, hdr_len+reported_len);
17684 /* The processing will take care of 4-way handshake sessions for WPA and WPA2 decryption */
17685 AirPDcapPacketProcess(&airpdcap_ctx, enc_data, hdr_len, hdr_len+reported_len, NULL((void*)0), 0, NULL((void*)0), TRUE(!(0)));
17686
17687 }
17688 /*
17689 * No-data frames don't have a body.
17690 */
17691 if (DATA_FRAME_IS_NULL(frame_type_subtype)((frame_type_subtype) & 0x04))
17692 goto end_of_wlan;
17693
17694 if (!wlan_subdissector) {
17695 guint fnum = 0;
17696
17697 /* key: bssid:src
17698 * data: last seq_control seen and frame number
17699 */
17700 retransmitted = FALSE(0);
17701 if (!pinfo->fd->flags.visited) {
17702 retransmit_key key;
17703 retransmit_key *result;
17704
17705 memcpy(key.bssid, whdr->bssid.data, 6);
17706 memcpy(key.src, whdr->src.data, 6);
17707 key.seq_control = 0;
17708 result = (retransmit_key *)g_hash_table_lookup(fc_analyse_retransmit_table, &key);
17709 if (result && (result->seq_control == seq_control)) {
17710 /* keep a pointer to the first seen frame, could be done with proto data? */
17711 fnum = result->fnum;
17712 g_hash_table_insert(fc_first_frame_table, GINT_TO_POINTER(pinfo->num)((gpointer) (glong) (pinfo->num)),
17713 GINT_TO_POINTER(fnum)((gpointer) (glong) (fnum)));
17714 retransmitted = TRUE(!(0));
17715 } else {
17716 /* first time or new seq*/
17717 if (!result) {
17718 result = wmem_new(wmem_file_scope(), retransmit_key)((retransmit_key*)wmem_alloc((wmem_file_scope()), sizeof(retransmit_key
)))
;
17719 *result = key;
17720 g_hash_table_insert(fc_analyse_retransmit_table, result, result);
17721 }
17722 result->seq_control = seq_control;
17723 result->fnum = pinfo->num;
17724 }
17725 }
17726 else if ((fnum = GPOINTER_TO_UINT(g_hash_table_lookup(fc_first_frame_table, GINT_TO_POINTER(pinfo->num)))((guint) (gulong) (g_hash_table_lookup(fc_first_frame_table, (
(gpointer) (glong) (pinfo->num)))))
)) {
17727 retransmitted = TRUE(!(0));
17728 }
17729
17730 if (retransmitted) {
17731 col_append_str(pinfo->cinfo, COL_INFO, " [retransmitted]");
17732 if (tree) {
17733 proto_item *item;
17734
17735 item=proto_tree_add_none_format(hdr_tree, hf_ieee80211_fc_analysis_retransmission, tvb, 0, 0,
17736 "Retransmitted frame");
17737 PROTO_ITEM_SET_GENERATED(item)do { if (item) do { if (((item)->finfo)) (((item)->finfo
))->flags = (((item)->finfo))->flags | (0x00000002);
} while(0); } while(0)
;
17738 item=proto_tree_add_uint(hdr_tree, hf_ieee80211_fc_analysis_retransmission_frame, tvb, 0, 0, fnum);
17739 PROTO_ITEM_SET_GENERATED(item)do { if (item) do { if (((item)->finfo)) (((item)->finfo
))->flags = (((item)->finfo))->flags | (0x00000002);
} while(0); } while(0)
;
17740 }
17741 next_tvb = tvb_new_subset(tvb, hdr_len, len, reported_len);
17742 call_data_dissector(next_tvb, pinfo, tree);
17743 goto end_of_wlan;
17744 }
17745 }
17746
17747 break;
17748
17749 case CONTROL_FRAME0x01:
17750 goto end_of_wlan;
17751
17752 case EXTENSION_FRAME0x03:
17753 break;
17754
17755 default:
17756 goto end_of_wlan;
17757 }
17758
17759 if (IS_PROTECTED(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x40)
17760 && !phdr->decrypted
17761 && (wlan_ignore_prot != WLAN_IGNORE_PROT_WO_IV1)) {
17762 /*
17763 * It's a WEP or WPA encrypted frame, and it hasn't already been
17764 * decrypted; dissect the protections parameters and decrypt the data,
17765 * if we have a matching key. Otherwise display it as data.
17766 */
17767 gboolean can_decrypt = FALSE(0);
17768 proto_tree *wep_tree = NULL((void*)0);
17769 guint32 iv;
17770 guint8 key, keybyte;
17771
17772#define PROTECTION_ALG_WEP AIRPDCAP_KEY_TYPE_WEP0
17773#define PROTECTION_ALG_TKIP AIRPDCAP_KEY_TYPE_TKIP6
17774#define PROTECTION_ALG_CCMP AIRPDCAP_KEY_TYPE_CCMP7
17775#define PROTECTION_ALG_RSNAPROTECTION_ALG_CCMP | PROTECTION_ALG_TKIP PROTECTION_ALG_CCMP | PROTECTION_ALG_TKIP
17776 guint8 algorithm=G_MAXUINT8((guint8) 0xff);
17777#define IS_TKIP(tvb, hdr_len) (tvb_get_guint8(tvb, hdr_len + 1) == \
17778 ((tvb_get_guint8(tvb, hdr_len) | 0x20) & 0x7f))
17779#define IS_CCMP(tvb, hdr_len) (tvb_get_guint8(tvb, hdr_len + 2) == 0)
17780 guint32 sec_header=0;
17781 guint32 sec_trailer=0;
17782
17783 next_tvb = try_decrypt(tvb, hdr_len, reported_len, &algorithm, &sec_header, &sec_trailer, &used_key);
17784
17785 keybyte = tvb_get_guint8(tvb, hdr_len + 3);
17786 key = KEY_OCTET_WEP_KEY(keybyte)(((keybyte) & 0xC0) >> 6);
17787 if ((keybyte & KEY_EXTIV0x20) && (len >= EXTIV_LEN8)) {
17788 /* Extended IV; this frame is likely encrypted with TKIP or CCMP */
17789 if (tree) {
17790 if (algorithm==PROTECTION_ALG_TKIP)
17791 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
17792 ett_wep_parameters, NULL((void*)0), "TKIP parameters");
17793 else if (algorithm==PROTECTION_ALG_CCMP)
17794 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
17795 ett_wep_parameters, NULL((void*)0), "CCMP parameters");
17796 else {
17797 if (IS_TKIP(tvb, hdr_len)) {
17798 algorithm=PROTECTION_ALG_TKIP;
17799 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
17800 ett_wep_parameters, NULL((void*)0), "TKIP parameters");
17801 } else if (IS_CCMP(tvb, hdr_len)) {
17802 algorithm=PROTECTION_ALG_CCMP;
17803 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
17804 ett_wep_parameters, NULL((void*)0), "CCMP parameters");
17805 } else
17806 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
17807 ett_wep_parameters, NULL((void*)0), "TKIP/CCMP parameters");
17808 }
17809 proto_item_set_len(ti, hdr_len + 8);
17810
17811 if (algorithm==PROTECTION_ALG_TKIP) {
17812 g_snprintf(out_buff, SHORT_STR256, "0x%08X%02X%02X",
17813 tvb_get_letohl(tvb, hdr_len + 4),
17814 tvb_get_guint8(tvb, hdr_len),
17815 tvb_get_guint8(tvb, hdr_len + 2));
17816 proto_tree_add_string(wep_tree, hf_ieee80211_tkip_extiv, tvb, hdr_len,
17817 EXTIV_LEN8, out_buff);
17818 } else if (algorithm==PROTECTION_ALG_CCMP) {
17819 g_snprintf(out_buff, SHORT_STR256, "0x%08X%02X%02X",
17820 tvb_get_letohl(tvb, hdr_len + 4),
17821 tvb_get_guint8(tvb, hdr_len + 1),
17822 tvb_get_guint8(tvb, hdr_len));
17823 proto_tree_add_string(wep_tree, hf_ieee80211_ccmp_extiv, tvb, hdr_len,
17824 EXTIV_LEN8, out_buff);
17825 }
17826
17827 proto_tree_add_uint(wep_tree, hf_ieee80211_wep_key, tvb, hdr_len + 3, 1, key);
17828 }
17829
17830 /* Subtract out the length of the IV. */
17831 len -= EXTIV_LEN8;
17832 reported_len -= EXTIV_LEN8;
17833 ivlen = EXTIV_LEN8;
17834 /* It is unknown whether this is TKIP or CCMP, so let's not even try to
17835 * parse TKIP Michael MIC+ICV or CCMP MIC. */
17836
17837 /* checking for the trailer */
17838 if (next_tvb!=NULL((void*)0)) {
17839 if (reported_len < (gint) sec_trailer) {
17840 /* There is no space for a trailer, ignore it and don't decrypt */
17841 ;
17842 } else if (len < reported_len) {
17843 /* There is space for a trailer, but we haven't capture all the */
17844 /* packet. Slice off the trailer, but don't try to decrypt */
17845 reported_len -= sec_trailer;
17846 if (len > reported_len)
17847 len = reported_len;
17848 } else {
17849 /* Ok, we have a trailer and the whole packet. Decrypt it! */
17850 /* TODO: At the moment we won't add the trailer to the tree, */
17851 /* so don't remove the trailer from the packet */
17852 len -= sec_trailer;
17853 reported_len -= sec_trailer;
17854 can_decrypt = TRUE(!(0));
17855
17856 /* Add Key information to packet */
17857 bytes_to_hexstr(out_buff, used_key.KeyData.Wpa.Ptk+32, AIRPDCAP_TK_LEN16); /* TK is stored in PTK at offset 32 bytes and 16 bytes long */
17858 out_buff[2*AIRPDCAP_TK_LEN16] = '\0';
17859
17860 if (key == 0) { /* encrypted with pairwise key */
17861 ti = proto_tree_add_string(wep_tree, hf_ieee80211_fc_analysis_tk, tvb, 0, 0, out_buff);
17862 PROTO_ITEM_SET_GENERATED(ti)do { if (ti) do { if (((ti)->finfo)) (((ti)->finfo))->
flags = (((ti)->finfo))->flags | (0x00000002); } while(
0); } while(0)
;
17863
17864 /* Also add the PMK used to to decrypt the packet. (PMK==PSK) */
17865 bytes_to_hexstr(out_buff, used_key.KeyData.Wpa.Psk, AIRPDCAP_WPA_PSK_LEN32); /* 32 bytes */
17866 out_buff[2*AIRPDCAP_WPA_PSK_LEN32] = '\0';
17867 ti = proto_tree_add_string(wep_tree, hf_ieee80211_fc_analysis_pmk, tvb, 0, 0, out_buff);
17868 PROTO_ITEM_SET_GENERATED(ti)do { if (ti) do { if (((ti)->finfo)) (((ti)->finfo))->
flags = (((ti)->finfo))->flags | (0x00000002); } while(
0); } while(0)
;
17869
17870 } else { /* Encrypted with Group Key */
17871 ti = proto_tree_add_string(wep_tree, hf_ieee80211_fc_analysis_gtk, tvb, 0, 0, out_buff); /* GTK is stored in PTK at offset 32 bytes and 16 bytes long */
17872 PROTO_ITEM_SET_GENERATED(ti)do { if (ti) do { if (((ti)->finfo)) (((ti)->finfo))->
flags = (((ti)->finfo))->flags | (0x00000002); } while(
0); } while(0)
;
17873 }
17874 }
17875 }
17876 } else {
17877 /* No Ext. IV - WEP packet */
17878 /*
17879 * XXX - pass the IV and key to "try_decrypt_wep()", and have it pass
17880 * them to "wep_decrypt()", rather than having "wep_decrypt()" extract
17881 * them itself.
17882 *
17883 * Also, just pass the data *following* the WEP parameters as the
17884 * buffer to decrypt.
17885 */
17886 iv = tvb_get_ntoh24(tvb, hdr_len);
17887 if (tree) {
17888 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 4,
17889 ett_wep_parameters, NULL((void*)0), "WEP parameters");
17890
17891 proto_tree_add_uint(wep_tree, hf_ieee80211_wep_iv, tvb, hdr_len, 3, iv);
17892 tvb_memcpy(tvb, iv_buff, hdr_len, 3);
17893 is_iv_bad = weak_iv(iv_buff);
17894 if (is_iv_bad != -1) {
17895 proto_tree_add_boolean_format (wep_tree, hf_ieee80211_wep_iv_weak,
17896 tvb, 0, 0, TRUE(!(0)),
17897 "Weak IV for key byte %d",
17898 is_iv_bad);
17899 }
17900 }
17901 if (tree)
17902 proto_tree_add_uint(wep_tree, hf_ieee80211_wep_key, tvb, hdr_len + 3, 1, key);
17903
17904 /* Subtract out the length of the IV. */
17905 len -= 4;
17906 reported_len -= 4;
17907 ivlen = 4;
17908
17909 /* Even if the decryption was not successful, set the algorithm */
17910 algorithm=PROTECTION_ALG_WEP;
17911
17912 /*
17913 * Well, this packet should, in theory, have an ICV.
17914 * Do we have the entire packet, and does it have enough data for
17915 * the ICV?
17916 */
17917 if (reported_len < 4) {
17918 /*
17919 * The packet is claimed not to even have enough data for a
17920 * 4-byte ICV.
17921 * Pretend it doesn't have an ICV.
17922 */
17923 ;
17924 } else if (len < reported_len) {
17925 /*
17926 * The packet is claimed to have enough data for a 4-byte ICV,
17927 * but we didn't capture all of the packet.
17928 * Slice off the 4-byte ICV from the reported length, and trim
17929 * the captured length so it's no more than the reported length;
17930 * that will slice off what of the ICV, if any, is in the
17931 * captured length.
17932 */
17933 reported_len -= 4;
17934 if (len > reported_len)
17935 len = reported_len;
17936 } else {
17937 /*
17938 * We have the entire packet, and it includes a 4-byte ICV.
17939 * Slice it off, and put it into the tree.
17940 *
17941 * We only support decrypting if we have the the ICV.
17942 *
17943 * XXX - the ICV is encrypted; we're putting the encrypted
17944 * value, not the decrypted value, into the tree.
17945 */
17946 len -= 4;
17947 reported_len -= 4;
17948 can_decrypt = TRUE(!(0));
17949 }
17950 }
17951
17952 if (algorithm == PROTECTION_ALG_WEP) {
17953 g_strlcpy(wlan_stats.protection, "WEP", MAX_PROTECT_LEN10);
17954 } else if (algorithm == PROTECTION_ALG_TKIP) {
17955 g_strlcpy(wlan_stats.protection, "TKIP", MAX_PROTECT_LEN10);
17956 } else if (algorithm == PROTECTION_ALG_CCMP) {
17957 g_strlcpy(wlan_stats.protection, "CCMP", MAX_PROTECT_LEN10);
17958 } else {
17959 g_strlcpy(wlan_stats.protection, "Unknown", MAX_PROTECT_LEN10);
17960 }
17961
17962 /* protection header */
17963 if (!can_decrypt || (next_tvb == NULL((void*)0))) {
17964 /*
17965 * WEP decode impossible or failed, treat payload as raw data
17966 * and don't attempt fragment reassembly or further dissection.
17967 */
17968 next_tvb = tvb_new_subset(tvb, hdr_len + ivlen, len, reported_len);
17969
17970 if (tree) {
17971 if (algorithm == PROTECTION_ALG_WEP) {
17972 if (can_decrypt)
17973 proto_tree_add_uint_format_value(wep_tree, hf_ieee80211_wep_icv, tvb,
17974 hdr_len + ivlen + len, 4,
17975 tvb_get_ntohl(tvb, hdr_len + ivlen + len),
17976 "0x%08x (not verified)",
17977 tvb_get_ntohl(tvb, hdr_len + ivlen + len));
17978 } else if (algorithm == PROTECTION_ALG_CCMP) {
17979 } else if (algorithm == PROTECTION_ALG_TKIP) {
17980 }
17981 }
17982
17983 if ((!(option_flags & IEEE80211_COMMON_OPT_IS_CENTRINO0x00000002)) && (wlan_ignore_prot == WLAN_IGNORE_PROT_NO0)) {
17984 /* Some wireless drivers (such as Centrino) WEP payload already decrypted */
17985 call_data_dissector(next_tvb, pinfo, tree);
17986 goto end_of_wlan;
17987 }
17988 } else {
17989 if (algorithm == PROTECTION_ALG_WEP) {
17990 if (tree)
17991 proto_tree_add_uint_format_value(wep_tree, hf_ieee80211_wep_icv, tvb,
17992 hdr_len + ivlen + len, 4,
17993 tvb_get_ntohl(tvb, hdr_len + ivlen + len),
17994 "0x%08x (correct)",
17995 tvb_get_ntohl(tvb, hdr_len + ivlen + len));
17996
17997 add_new_data_source(pinfo, next_tvb, "Decrypted WEP data");
17998 } else if (algorithm==PROTECTION_ALG_CCMP) {
17999 add_new_data_source(pinfo, next_tvb, "Decrypted CCMP data");
18000 } else if (algorithm==PROTECTION_ALG_TKIP) {
18001 add_new_data_source(pinfo, next_tvb, "Decrypted TKIP data");
18002 }
18003#undef IS_TKIP
18004#undef IS_CCMP
18005#undef PROTECTION_ALG_CCMP
18006#undef PROTECTION_ALG_TKIP
18007#undef PROTECTION_ALG_WEP
18008 }
18009
18010 /*
18011 * WEP decryption successful!
18012 *
18013 * Use the tvbuff we got back from the decryption; the data starts at
18014 * the beginning. The lengths are already correct for the decoded WEP
18015 * payload.
18016 */
18017 hdr_len = 0;
18018
18019 } else {
18020 /*
18021 * Not a WEP-encrypted frame; just use the data from the tvbuff
18022 * handed to us.
18023 *
18024 * The payload starts at "hdr_len" (i.e., just past the 802.11
18025 * MAC header), the length of data in the tvbuff following the
18026 * 802.11 header is "len", and the length of data in the packet
18027 * following the 802.11 header is "reported_len".
18028 */
18029 next_tvb = tvb;
18030 }
18031
18032 /*
18033 * Do defragmentation if "wlan_defragment" is true, and we have more
18034 * fragments or this isn't the first fragment.
18035 *
18036 * We have to do some special handling to catch frames that
18037 * have the "More Fragments" indicator not set but that
18038 * don't show up as reassembled and don't have any other
18039 * fragments present. Some networking interfaces appear
18040 * to do reassembly even when you're capturing raw packets
18041 * *and* show the reassembled packet without the "More
18042 * Fragments" indicator set *but* with a non-zero fragment
18043 * number.
18044 *
18045 * "fragment_add_seq_802_11()" handles that; we want to call it
18046 * even if we have a short frame, so that it does those checks - if
18047 * the frame is short, it doesn't do reassembly on it.
18048 *
18049 * (This could get some false positives if we really *did* only
18050 * capture the last fragment of a fragmented packet, but that's
18051 * life.)
18052 */
18053 save_fragmented = pinfo->fragmented;
18054 if (wlan_defragment && (more_frags || (frag_number != 0))) {
18055 fragment_head *fd_head;
18056
18057 /*
18058 * If we've already seen this frame, look it up in the
18059 * table of reassembled packets, otherwise add it to
18060 * whatever reassembly is in progress, if any, and see
18061 * if it's done.
18062 */
18063 if (reported_len < 0)
18064 THROW(ReportedBoundsError)except_throw(1, (2), ((void*)0));
18065 fd_head = fragment_add_seq_802_11(&wlan_reassembly_table,
18066 next_tvb, hdr_len, pinfo, seq_number, NULL((void*)0),
18067 frag_number,
18068 reported_len,
18069 more_frags);
18070 next_tvb = process_reassembled_data(tvb, hdr_len, pinfo,
18071 "Reassembled 802.11", fd_head,
18072 &frag_items, NULL((void*)0), hdr_tree);
18073 } else {
18074 /*
18075 * If this is the first fragment, dissect its contents, otherwise
18076 * just show it as a fragment.
18077 */
18078 if (frag_number != 0) {
18079 /* Not the first fragment - don't dissect it. */
18080 next_tvb = NULL((void*)0);
18081 } else {
18082 /* First fragment, or not fragmented. Dissect what we have here. */
18083
18084 /* Get a tvbuff for the payload. */
18085 next_tvb = tvb_new_subset(next_tvb, hdr_len, len, reported_len);
18086
18087 /*
18088 * If this is the first fragment, but not the only fragment,
18089 * tell the next protocol that.
18090 */
18091 if (more_frags)
18092 pinfo->fragmented = TRUE(!(0));
18093 else
18094 pinfo->fragmented = FALSE(0);
18095 }
18096 }
18097
18098 if (next_tvb == NULL((void*)0)) {
18099 /* Just show this as an incomplete fragment. */
18100 col_set_str(pinfo->cinfo, COL_INFO, "Fragmented IEEE 802.11 frame");
18101 next_tvb = tvb_new_subset(tvb, hdr_len, len, reported_len);
18102 call_data_dissector(next_tvb, pinfo, tree);
18103 pinfo->fragmented = save_fragmented;
18104 goto end_of_wlan;
18105 }
18106
18107 switch (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2))
18108 {
18109
18110 case MGT_FRAME0x00:
18111 dissect_ieee80211_mgt(fcf, next_tvb, pinfo, tree);
18112 break;
18113
18114 case DATA_FRAME0x02:
18115 if (is_amsdu && (tvb_reported_length_remaining(next_tvb, 0) > 4)) {
18116 proto_item *parent_item;
18117 proto_tree *mpdu_tree;
18118 guint32 msdu_offset = 0;
18119 guint i = 1;
18120
18121 parent_item = proto_tree_add_protocol_format(tree, proto_aggregate, next_tvb, 0,
18122 tvb_reported_length_remaining(next_tvb, 0), "IEEE 802.11 Aggregate MSDU");
18123 mpdu_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_parent_tree);
18124
18125 do {
18126 tvbuff_t *volatile msdu_tvb;
18127 guint16 msdu_length;
18128 proto_tree *subframe_tree;
18129
18130 /*
18131 * IEEE Std 802.11-2012 says, in section 8.3.2.2 "A-MSDU format":
18132 *
18133 * The A-MSDU subframe header contains three fields: DA, SA, and
18134 * Length. The order of these fields and the bits within these
18135 * fields are the same as the IEEE 802.3 frame format.
18136 *
18137 * which means that the length field is big-endian, not
18138 * little-endian.
18139 */
18140 msdu_length = tvb_get_ntohs(next_tvb, msdu_offset+12);
18141
18142 parent_item = proto_tree_add_item(mpdu_tree, hf_ieee80211_amsdu_subframe, next_tvb,
18143 msdu_offset, roundup2(msdu_offset+14+msdu_length, 4)(((msdu_offset+14+msdu_length)+((4)-1))&(~((4)-1))), ENC_NA0x00000000);
18144 proto_item_append_text(parent_item, " #%u", i);
18145 subframe_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_subframe_tree);
18146 i += 1;
18147
18148 proto_tree_add_item(subframe_tree, hf_ieee80211_addr_da, next_tvb, msdu_offset, 6, ENC_NA0x00000000);
18149 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_da_resolved, tvb, msdu_offset, 6,
18150 tvb_get_ether_name(tvb, msdu_offset));
18151 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
18152 proto_tree_add_item(subframe_tree, hf_ieee80211_addr_sa, next_tvb, msdu_offset+6, 6, ENC_NA0x00000000);
18153 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_sa_resolved, tvb, msdu_offset+6, 6,
18154 tvb_get_ether_name(tvb, msdu_offset+6));
18155 PROTO_ITEM_SET_HIDDEN(hidden_item)do { if (hidden_item) do { if (((hidden_item)->finfo)) (((
hidden_item)->finfo))->flags = (((hidden_item)->finfo
))->flags | (0x00000001); } while(0); } while(0)
;
18156 proto_tree_add_item(subframe_tree, hf_ieee80211_amsdu_length, next_tvb, msdu_offset+12, 2, ENC_BIG_ENDIAN0x00000000);
18157
18158 msdu_offset += 14;
18159 msdu_tvb = tvb_new_subset_length(next_tvb, msdu_offset, msdu_length);
18160 call_dissector(llc_handle, msdu_tvb, pinfo, subframe_tree);
18161 msdu_offset = roundup2(msdu_offset+msdu_length, 4)(((msdu_offset+msdu_length)+((4)-1))&(~((4)-1)));
18162 } while (tvb_reported_length_remaining(next_tvb, msdu_offset) > 14);
18163
18164 break;
18165 }
18166 /* I guess some bridges take Netware Ethernet_802_3 frames,
18167 which are 802.3 frames (with a length field rather than
18168 a type field, but with no 802.2 header in the payload),
18169 and just stick the payload into an 802.11 frame. I've seen
18170 captures that show frames of that sort.
18171
18172 We also handle some odd form of encapsulation in which a
18173 complete Ethernet frame is encapsulated within an 802.11
18174 data frame, with no 802.2 header. This has been seen
18175 from some hardware.
18176
18177 On top of that, at least at some point it appeared that
18178 the OLPC XO sent out frames with two bytes of 0 between
18179 the "end" of the 802.11 header and the beginning of
18180 the payload. Something similar has also been observed
18181 with Atheros chipsets. There the sequence control field
18182 seems repeated.
18183
18184 So, if the packet doesn't start with 0xaa 0xaa:
18185
18186 we first use the same scheme that linux-wlan-ng does to detect
18187 those encapsulated Ethernet frames, namely looking to see whether
18188 the frame either starts with 6 octets that match the destination
18189 address from the 802.11 header or has 6 octets that match the
18190 source address from the 802.11 header following the first 6 octets,
18191 and, if so, treat it as an encapsulated Ethernet frame;
18192
18193 otherwise, we use the same scheme that we use in the Ethernet
18194 dissector to recognize Netware 802.3 frames, namely checking
18195 whether the packet starts with 0xff 0xff and, if so, treat it
18196 as an encapsulated IPX frame, and then check whether the
18197 packet starts with 0x00 0x00 and, if so, treat it as an OLPC
18198 frame, or check the packet starts with the repetition of the
18199 sequence control field and, if so, treat it as an Atheros frame. */
18200 encap_type = ENCAP_802_2;
18201 if (tvb_bytes_exist(next_tvb, 0, 2)) {
18202 octet1 = tvb_get_guint8(next_tvb, 0);
18203 octet2 = tvb_get_guint8(next_tvb, 1);
18204 if ((octet1 != 0xaa) || (octet2 != 0xaa)) {
18205 if ((tvb_memeql(next_tvb, 6, (const guint8 *)pinfo->dl_src.data, 6) == 0) ||
18206 (tvb_memeql(next_tvb, 0, (const guint8 *)pinfo->dl_dst.data, 6) == 0))
18207 encap_type = ENCAP_ETHERNET;
18208 else if ((octet1 == 0xff) && (octet2 == 0xff))
18209 encap_type = ENCAP_IPX;
18210 else if (((octet1 == 0x00) && (octet2 == 0x00)) ||
18211 (((octet2 << 8) | octet1) == seq_control)) {
18212 proto_tree_add_item(tree, hf_ieee80211_mysterious_olpc_stuff, next_tvb, 0, 2, ENC_NA0x00000000);
18213 next_tvb = tvb_new_subset_remaining(next_tvb, 2);
18214 }
18215 }
18216 }
18217
18218 switch (encap_type) {
18219
18220 case ENCAP_802_2:
18221 call_dissector(llc_handle, next_tvb, pinfo, tree);
18222 break;
18223
18224 case ENCAP_ETHERNET:
18225 call_dissector(eth_withoutfcs_handle, next_tvb, pinfo, tree);
18226 break;
18227
18228 case ENCAP_IPX:
18229 call_dissector(ipx_handle, next_tvb, pinfo, tree);
18230 break;
18231 }
18232 break;
18233
18234 case EXTENSION_FRAME0x03:
18235 {
18236 dissect_ieee80211_extension(fcf, next_tvb, pinfo, tree);
18237 break;
18238 }
18239 }
18240 pinfo->fragmented = save_fragmented;
18241
18242end_of_wlan:
18243 whdr->stats = wlan_stats;
18244 tap_queue_packet(wlan_tap, pinfo, whdr);
18245 memset(&wlan_stats, 0, sizeof wlan_stats);
18246
18247 return tvb_captured_length(tvb);
18248}
18249
18250/*
18251 * Dissect 802.11 with a variable-length link-layer header and with the FCS
18252 * presence or absence indicated by the pseudo-header, if there is one.
18253 */
18254static int
18255dissect_ieee80211(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
18256{
18257 struct ieee_802_11_phdr *phdr = (struct ieee_802_11_phdr *)data;
18258 struct ieee_802_11_phdr ourphdr;
18259
18260 if (phdr == NULL((void*)0)) {
18261 /*
18262 * Fake a pseudo-header.
18263 * XXX - what are we supposed to do if the FCS length is unknown?
18264 */
18265 memset(&ourphdr, 0, sizeof(ourphdr));
18266 ourphdr.fcs_len = -1;
18267 ourphdr.decrypted = FALSE(0);
18268 ourphdr.datapad = FALSE(0);
18269 ourphdr.phy = PHDR_802_11_PHY_UNKNOWN0;
18270 phdr = &ourphdr;
18271 }
18272 return dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, phdr);
18273}
18274
18275/*
18276 * Dissect 802.11 with a variable-length link-layer header and with an
18277 * FCS, but no pseudo-header.
18278 */
18279static int
18280dissect_ieee80211_withfcs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
18281{
18282 struct ieee_802_11_phdr phdr;
18283
18284 /* Construct a pseudo-header to hand to the common code. */
18285 memset(&phdr, 0, sizeof(phdr));
18286 phdr.fcs_len = 4;
18287 phdr.decrypted = FALSE(0);
18288 phdr.datapad = FALSE(0);
18289 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
18290 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, &phdr);
18291 return tvb_captured_length(tvb);
18292}
18293
18294/*
18295 * Dissect 802.11 with a variable-length link-layer header and without an
18296 * FCS, but no pseudo-header.
18297 */
18298static int
18299dissect_ieee80211_withoutfcs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
18300{
18301 struct ieee_802_11_phdr phdr;
18302
18303 /* Construct a pseudo-header to hand to the common code. */
18304 memset(&phdr, 0, sizeof(phdr));
18305 phdr.decrypted = FALSE(0);
18306 phdr.datapad = FALSE(0);
18307 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
18308 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, &phdr);
18309 return tvb_captured_length(tvb);
18310}
18311
18312/*
18313 * Dissect 802.11 from an Intel 2200BG adapter in a Centrino laptop
18314 * running Windows XP.
18315 *
18316 * From
18317 *
18318 * https://www.wireshark.org/lists/ethereal-dev/200407/msg00184.html
18319 *
18320 * and
18321 *
18322 * https://www.wireshark.org/lists/ethereal-dev/200407/msg00393.html:
18323 *
18324 * I tried capturing from a Centrino laptop with the Intel 2200BG 802.11g
18325 * chipset. I saw a lot of "Ethernet II" frames with 0x2452 as ethertype.
18326 *
18327 * ...
18328 *
18329 * This behaviour has been observed on Windows XP. In my opinion it is
18330 * a "proprietary" behaviour of either the Centrino driver or the Centrino
18331 * hardware. Currently I have no Linux distro installed on the machine to
18332 * verify whether it is also the case.
18333 *
18334 * These packets are seen only in a promiscuous capture:
18335 * - Packets normally received by the Centrino computer have the normal
18336 * structure (no 802.11/LLC header but directly IP header).
18337 * - Packets that are supposed to be received by another computer have
18338 * the 802.11/LLC headers. ... Also I noticed that when WEP is enabled,
18339 * the 802.11 header has the flag "WEP" set to true, but the packet
18340 * is already decrypted. I added a test in the code to accomodate this.
18341 * For TKIP it seems to stay encrypted.
18342 */
18343static int
18344dissect_ieee80211_centrino(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
18345{
18346 struct ieee_802_11_phdr phdr;
18347
18348 /* Construct a pseudo-header to hand to the common code. */
18349 memset(&phdr, 0, sizeof(phdr));
18350 phdr.decrypted = FALSE(0);
18351 phdr.datapad = FALSE(0);
18352 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
18353 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_IS_CENTRINO0x00000002|IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, &phdr);
18354 return tvb_captured_length(tvb);
18355}
18356
18357/*
18358 * Dissect 802.11 with a variable-length link-layer header and a byte-swapped
18359 * control field and with no FCS (some hardware sends out LWAPP-encapsulated
18360 * 802.11 packets with the control field byte swapped).
18361 */
18362static int
18363dissect_ieee80211_bsfc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
18364{
18365 struct ieee_802_11_phdr phdr;
18366
18367 /* Construct a pseudo-header to hand to the common code. */
18368 memset(&phdr, 0, sizeof(phdr));
18369 phdr.decrypted = FALSE(0);
18370 phdr.datapad = FALSE(0);
18371 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
18372 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_BROKEN_FC0x00000001|IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, &phdr);
18373 return tvb_captured_length(tvb);
18374}
18375
18376/*
18377 * Dissect 802.11 with a variable-length link-layer header without qos elements
18378 * in data+qos frames and with no FCS (sent as WIDS frames by Cisco standalone
18379 * APs).
18380 */
18381static int
18382dissect_ieee80211_noqos(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
18383{
18384 struct ieee_802_11_phdr phdr;
18385
18386 /* Construct a pseudo-header to hand to the common code. */
18387 memset(&phdr, 0, sizeof(phdr));
18388 phdr.decrypted = FALSE(0);
18389 phdr.datapad = FALSE(0);
18390 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
18391 dissect_ieee80211_common(tvb, pinfo, tree, 0, &phdr);
18392 return tvb_captured_length(tvb);
18393}
18394
18395
18396static void
18397wlan_defragment_init(void)
18398{
18399 reassembly_table_init(&wlan_reassembly_table,
18400 &addresses_reassembly_table_functions);
18401}
18402
18403static void
18404wlan_defragment_cleanup(void)
18405{
18406 reassembly_table_destroy(&wlan_reassembly_table);
18407}
18408
18409/* ------------- */
18410static guint
18411retransmit_hash(gconstpointer k)
18412{
18413 const retransmit_key *key = (const retransmit_key *)k;
18414 guint hash_val;
18415 int i;
18416
18417 hash_val = 0;
18418 for (i = 0; i < 6; i++)
18419 hash_val += key->bssid[i];
18420
18421 for (i = 0; i < 6; i++)
18422 hash_val += key->src[i];
18423
18424 return hash_val;
18425}
18426
18427static gint
18428retransmit_equal(gconstpointer k1, gconstpointer k2)
18429{
18430 const retransmit_key *key1 = (const retransmit_key *)k1;
18431 const retransmit_key *key2 = (const retransmit_key *)k2;
18432
18433 return ((!memcmp(key1->bssid, key2->bssid, 6) && !memcmp(key1->src, key2->src, 6)) ? TRUE(!(0)):FALSE(0));
18434}
18435
18436static guint
18437frame_hash(gconstpointer k)
18438{
18439 guint32 frame = GPOINTER_TO_UINT(k)((guint) (gulong) (k));
18440
18441 return frame;
18442}
18443
18444static gint
18445frame_equal(gconstpointer k1, gconstpointer k2)
18446{
18447 guint32 frame1 = GPOINTER_TO_UINT(k1)((guint) (gulong) (k1));
18448 guint32 frame2 = GPOINTER_TO_UINT(k2)((guint) (gulong) (k2));
18449
18450 return frame1==frame2;
18451}
18452
18453/*
18454 * EAPOL key description dissectors.
18455 */
18456#define KEY_INFO_KEYDES_VERSION_MASK0x0007 0x0007
18457#define KEY_INFO_KEY_TYPE_MASK0x0008 0x0008
18458#define KEY_INFO_KEY_INDEX_MASK0x0030 0x0030
18459#define KEY_INFO_INSTALL_MASK0x0040 0x0040
18460#define KEY_INFO_KEY_ACK_MASK0x0080 0x0080
18461#define KEY_INFO_KEY_MIC_MASK0x0100 0x0100
18462#define KEY_INFO_SECURE_MASK0x0200 0x0200
18463#define KEY_INFO_ERROR_MASK0x0400 0x0400
18464#define KEY_INFO_REQUEST_MASK0x0800 0x0800
18465#define KEY_INFO_ENCRYPTED_KEY_DATA_MASK0x1000 0x1000
18466#define KEY_INFO_SMK_MESSAGE_MASK0x2000 0x2000
18467
18468#define KEYDES_VER_TYPE10x01 0x01
18469#define KEYDES_VER_TYPE20x02 0x02
18470#define KEYDES_VER_TYPE30x03 0x03
18471
18472static const value_string keydes_version_vals[] = {
18473 { KEYDES_VER_TYPE10x01, "RC4 Cipher, HMAC-MD5 MIC" },
18474 { KEYDES_VER_TYPE20x02, "AES Cipher, HMAC-SHA1 MIC" },
18475 { KEYDES_VER_TYPE30x03, "AES Cipher, AES-128-CMAC MIC" },
18476 { 0, NULL((void*)0) }
18477};
18478
18479static int proto_wlan_rsna_eapol = -1;
18480
18481static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo = -1;
18482static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_keydes_version = -1;
18483static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_type = -1;
18484static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_index = -1;
18485static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_install = -1;
18486static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_ack = -1;
18487static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_mic = -1;
18488static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_secure = -1;
18489static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_error = -1;
18490static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_request = -1;
18491static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_encrypted_key_data = -1;
18492static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_smk_message = -1;
18493static int hf_wlan_rsna_eapol_keydes_key_len = -1;
18494static int hf_wlan_rsna_eapol_keydes_replay_counter = -1;
18495static int hf_wlan_rsna_eapol_keydes_key_iv = -1;
18496static int hf_wlan_rsna_eapol_wpa_keydes_nonce = -1;
18497static int hf_wlan_rsna_eapol_wpa_keydes_rsc = -1;
18498static int hf_wlan_rsna_eapol_wpa_keydes_id = -1;
18499static int hf_wlan_rsna_eapol_wpa_keydes_mic = -1;
18500static int hf_wlan_rsna_eapol_wpa_keydes_data_len = -1;
18501static int hf_wlan_rsna_eapol_wpa_keydes_data = -1;
18502
18503static gint ett_keyinfo = -1;
18504static gint ett_wlan_rsna_eapol_keydes_data = -1;
18505
18506static const true_false_string keyinfo_key_type_tfs = { "Pairwise Key", "Group Key" };
18507
18508static int
18509dissect_wlan_rsna_eapol_wpa_or_rsn_key(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
18510{
18511 int offset = 0;
18512 guint16 keyinfo;
18513 guint16 eapol_data_len;
18514 proto_tree *keyinfo_item = NULL((void*)0);
18515 proto_tree *keyinfo_tree = NULL((void*)0);
18516 proto_tree *keydes_tree;
18517 proto_tree *ti = NULL((void*)0);
18518
18519 /*
18520 * RSNA key descriptors.
18521 */
18522 eapol_data_len = tvb_get_ntohs(tvb, offset+92);
18523 keyinfo = tvb_get_ntohs(tvb, offset);
18524 if (keyinfo & KEY_INFO_REQUEST_MASK0x0800) {
18525 col_set_str(pinfo->cinfo, COL_INFO, "Key (Request)");
18526 if (keyinfo & KEY_INFO_ERROR_MASK0x0400)
18527 col_set_str(pinfo->cinfo, COL_INFO, "Key (Request, Error)");
18528 } else if (keyinfo & KEY_INFO_KEY_TYPE_MASK0x0008) {
18529 guint16 masked;
18530 /* Windows is setting the Secure Bit on message 2 when rekeying, so we'll ignore it */
18531 masked = keyinfo &
18532 (KEY_INFO_INSTALL_MASK0x0040 | KEY_INFO_KEY_ACK_MASK0x0080 | KEY_INFO_KEY_MIC_MASK0x0100);
18533
18534 switch (masked) {
18535 case KEY_INFO_KEY_ACK_MASK0x0080:
18536 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 1 of 4)");
18537 break;
18538
18539 case KEY_INFO_KEY_MIC_MASK0x0100:
18540 /* We check the key length to differentiate between message 2 and 4 and just hope that
18541 there are no strange implementations with key data and non-zero key length in message 4.
18542 According to the IEEE specification, sections 11.6.6.3 and 11.6.6.5 we should
18543 use the Secure Bit and/or the Nonce, but there are implementations ignoring the spec.
18544 The Secure Bit is incorrectly set on rekeys for Windows clients for Message 2 and the Nonce is non-zero
18545 in Message 4 in Bug 11994 (Apple?) */
18546 if (eapol_data_len)
18547 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 2 of 4)");
18548 else
18549 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 4 of 4)");
18550 break;
18551
18552 case (KEY_INFO_INSTALL_MASK0x0040 | KEY_INFO_KEY_ACK_MASK0x0080 | KEY_INFO_KEY_MIC_MASK0x0100):
18553 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 3 of 4)");
18554 break;
18555 }
18556 } else {
18557 if (keyinfo & KEY_INFO_KEY_ACK_MASK0x0080)
18558 col_set_str(pinfo->cinfo, COL_INFO, "Key (Group Message 1 of 2)");
18559 else
18560 col_set_str(pinfo->cinfo, COL_INFO, "Key (Group Message 2 of 2)");
18561 }
18562 keyinfo_item =
18563 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo, tvb,
18564 offset, 2, ENC_BIG_ENDIAN0x00000000);
18565
18566 keyinfo_tree = proto_item_add_subtree(keyinfo_item, ett_keyinfo);
18567 proto_tree_add_item(keyinfo_tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo_keydes_version, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
18568 proto_tree_add_item(keyinfo_tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_type, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
18569 proto_tree_add_item(keyinfo_tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_index, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
18570 proto_tree_add_item(keyinfo_tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo_install, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
18571 proto_tree_add_item(keyinfo_tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_ack, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
18572 proto_tree_add_item(keyinfo_tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_mic, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
18573 proto_tree_add_item(keyinfo_tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo_secure, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
18574 proto_tree_add_item(keyinfo_tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo_error, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
18575 proto_tree_add_item(keyinfo_tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo_request, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
18576 proto_tree_add_item(keyinfo_tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo_encrypted_key_data, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
18577 proto_tree_add_item(keyinfo_tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo_smk_message, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
18578 offset += 2;
18579
18580 proto_tree_add_item(tree, hf_wlan_rsna_eapol_keydes_key_len, tvb, offset,
18581 2, ENC_BIG_ENDIAN0x00000000);
18582 offset += 2;
18583 proto_tree_add_item(tree, hf_wlan_rsna_eapol_keydes_replay_counter, tvb,
18584 offset, 8, ENC_BIG_ENDIAN0x00000000);
18585 offset += 8;
18586 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_nonce, tvb, offset,
18587 32, ENC_NA0x00000000);
18588 offset += 32;
18589 proto_tree_add_item(tree, hf_wlan_rsna_eapol_keydes_key_iv, tvb,
18590 offset, 16, ENC_NA0x00000000);
18591 offset += 16;
18592 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_rsc, tvb, offset,
18593 8, ENC_NA0x00000000);
18594 offset += 8;
18595 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_id, tvb, offset, 8,
18596 ENC_NA0x00000000);
18597 offset += 8;
18598 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_mic, tvb, offset,
18599 16, ENC_NA0x00000000);
18600 offset += 16;
18601 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_data_len, tvb,
18602 offset, 2, ENC_BIG_ENDIAN0x00000000);
18603 offset += 2;
18604 if (eapol_data_len != 0) {
18605 ti = proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_data,
18606 tvb, offset, eapol_data_len, ENC_NA0x00000000);
18607 if ((keyinfo & KEY_INFO_ENCRYPTED_KEY_DATA_MASK0x1000) ||
18608 !(keyinfo & KEY_INFO_KEY_TYPE_MASK0x0008)) {
18609 /* RSN: EAPOL-Key Key Data is encrypted.
18610 * WPA: Group Keys use encrypted Key Data.
18611 * Cannot parse this without knowing the key.
18612 * IEEE 802.11i-2004 8.5.2.
18613 */
18614 } else {
18615 keydes_tree = proto_item_add_subtree(ti, ett_wlan_rsna_eapol_keydes_data);
18616 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, keydes_tree,
18617 tvb_reported_length_remaining(tvb, offset),
18618 -1);
18619 }
18620 }
18621 return tvb_captured_length(tvb);
18622}
18623
18624/* It returns the algorithm used for decryption and the header and trailer lengths. */
18625static tvbuff_t *
18626try_decrypt(tvbuff_t *tvb, guint offset, guint len, guint8 *algorithm, guint32 *sec_header, guint32 *sec_trailer, PAIRPDCAP_KEY_ITEM used_key)
18627{
18628 const guint8 *enc_data;
18629 tvbuff_t *decr_tvb = NULL((void*)0);
18630 guint32 dec_caplen;
18631 guchar dec_data[AIRPDCAP_MAX_CAPLEN8192];
18632
18633 if (!enable_decryption)
1
Assuming 'enable_decryption' is not equal to 0
2
Taking false branch
18634 return NULL((void*)0);
18635
18636 /* get the entire packet */
18637 enc_data = tvb_get_ptr(tvb, 0, len+offset);
18638
18639 /* process packet with AirPDcap */
18640 if (AirPDcapPacketProcess(&airpdcap_ctx, enc_data, offset, offset+len, dec_data, &dec_caplen,
3
Assuming the condition is true
4
Taking true branch
18641 used_key, FALSE(0))==AIRPDCAP_RET_SUCCESS0)
18642 {
18643 guint8 *tmp;
18644 *algorithm=used_key->KeyType;
18645 switch (*algorithm) {
5
Control jumps to 'case 0:' at line 18646
18646 case AIRPDCAP_KEY_TYPE_WEP0:
18647 *sec_header=AIRPDCAP_WEP_HEADER3 + 1;
18648 *sec_trailer=AIRPDCAP_WEP_TRAILER4;
18649 break;
6
Execution continues on line 18663
18650 case AIRPDCAP_KEY_TYPE_CCMP7:
18651 *sec_header=AIRPDCAP_RSNA_HEADER3 + 1 + 4;
18652 *sec_trailer=AIRPDCAP_CCMP_TRAILER8;
18653 break;
18654 case AIRPDCAP_KEY_TYPE_TKIP6:
18655 *sec_header=AIRPDCAP_RSNA_HEADER3 + 1 + 4;
18656 *sec_trailer=AIRPDCAP_TKIP_TRAILER8 + 4;
18657 break;
18658 default:
18659 return NULL((void*)0);
18660 }
18661
18662 /* allocate buffer for decrypted payload */
18663 tmp = (guint8 *)g_memdup(dec_data+offset, dec_caplen-offset);
7
Memory is allocated
18664
18665 len = dec_caplen-offset;
18666
18667 /* decrypt successful, let's set up a new data tvb. */
18668 decr_tvb = tvb_new_child_real_data(tvb, tmp, len, len);
8
Potential leak of memory pointed to by 'tmp'
18669 tvb_set_free_cb(decr_tvb, g_free);
18670 }
18671
18672 return decr_tvb;
18673}
18674
18675/* Collect our WEP and WPA keys */
18676static void
18677set_airpdcap_keys(void)
18678{
18679 AIRPDCAP_KEYS_COLLECTION keys;
18680 GByteArray *bytes = NULL((void*)0);
18681 guint i;
18682
18683 keys.nKeys = 0;
18684
18685 for (i = 0; (uat_wep_key_records != NULL((void*)0)) && (i < num_wepkeys_uat) && (i < MAX_ENCRYPTION_KEYS64); i++)
18686 {
18687 decryption_key_t *dk;
18688 dk = parse_key_string(uat_wep_key_records[i].string, uat_wep_key_records[i].key);
18689
18690 if (dk != NULL((void*)0))
18691 {
18692 AIRPDCAP_KEY_ITEM key;
18693 if (dk->type == AIRPDCAP_KEY_TYPE_WEP0)
18694 {
18695 gboolean res;
18696 key.KeyType = AIRPDCAP_KEY_TYPE_WEP0;
18697
18698 bytes = g_byte_array_new();
18699 res = hex_str_to_bytes(dk->key->str, bytes, FALSE(0));
18700
18701 if (dk->key->str && res && (bytes->len > 0) && (bytes->len <= AIRPDCAP_WEP_KEY_MAXLEN32))
18702 {
18703 /*
18704 * WEP key is correct (well, the can be even or odd, so it is not
18705 * a real check, I think... is a check performed somewhere in the
18706 * AirPDcap function???)
18707 */
18708 memcpy(key.KeyData.Wep.WepKey, bytes->data, bytes->len);
18709 key.KeyData.Wep.WepKeyLen = bytes->len;
18710 keys.Keys[keys.nKeys] = key;
18711 keys.nKeys += 1;
18712 }
18713 }
18714 else if (dk->type == AIRPDCAP_KEY_TYPE_WPA_PWD3)
18715 {
18716 key.KeyType = AIRPDCAP_KEY_TYPE_WPA_PWD3;
18717
18718 /* XXX - This just lops the end if the key off if it's too long.
18719 * Should we handle this more gracefully? */
18720 g_strlcpy(key.UserPwd.Passphrase, dk->key->str, AIRPDCAP_WPA_PASSPHRASE_MAX_LEN63+1);
18721
18722 key.UserPwd.SsidLen = 0;
18723 if ((dk->ssid != NULL((void*)0)) && (dk->ssid->len <= AIRPDCAP_WPA_SSID_MAX_LEN32))
18724 {
18725 memcpy(key.UserPwd.Ssid, dk->ssid->data, dk->ssid->len);
18726 key.UserPwd.SsidLen = dk->ssid->len;
18727 }
18728
18729 keys.Keys[keys.nKeys] = key;
18730 keys.nKeys += 1;
18731 }
18732 else if (dk->type == AIRPDCAP_KEY_TYPE_WPA_PSK4)
18733 {
18734 key.KeyType = AIRPDCAP_KEY_TYPE_WPA_PSK4;
18735
18736 bytes = g_byte_array_new();
18737 hex_str_to_bytes(dk->key->str, bytes, FALSE(0));
18738
18739 /* XXX - Pass the correct array of bytes... */
18740 if (bytes->len <= AIRPDCAP_WPA_PSK_LEN32) {
18741 memcpy(key.KeyData.Wpa.Psk, bytes->data, bytes->len);
18742
18743 keys.Keys[keys.nKeys] = key;
18744 keys.nKeys += 1;
18745 }
18746 }
18747 free_key_string(dk);
18748 if (bytes) {
18749 g_byte_array_free(bytes, TRUE(!(0)));
18750 bytes = NULL((void*)0);
18751 }
18752 }
18753 }
18754
18755 /* Now set the keys */
18756 AirPDcapSetKeys(&airpdcap_ctx, keys.Keys, keys.nKeys);
18757
18758}
18759
18760static void
18761init_wepkeys(void)
18762{
18763
18764 /*
18765 * XXX - AirPDcap - That God sends it to us beautiful (che dio ce la mandi bona)
18766 * The next lines will add a key to the AirPDcap context. The keystring will be added
18767 * to the old WEP array too, but we don't care, because the packets will come here
18768 * already decrypted... One of these days we will fix this too
18769 */
18770 set_airpdcap_keys();
18771}
18772
18773/*
18774 * This code had been taken from AirSnort crack.c function classify()
18775 * Permission granted by snax <at> shmoo dot com
18776 * weak_iv - determine which key byte an iv is useful in resolving
18777 * parm - p, pointer to the first byte of an IV
18778 * return - n - this IV is weak for byte n of a WEP key
18779 * -1 - this IV is not weak for any key bytes
18780 *
18781 * This function tests for IVs that are known to satisfy the criteria
18782 * for a weak IV as specified in FMS section 7.1
18783 *
18784 */
18785static int
18786weak_iv(guchar *iv)
18787{
18788 guchar sum, k;
18789
18790 if ((iv[1] == 255) && (iv[0] > 2) && (iv[0] < 16)) {
18791 return iv[0] -3;
18792 }
18793
18794 sum = iv[0] + iv[1];
18795 if (sum == 1) {
18796 if (iv[2] <= 0x0a) {
18797 return iv[2] +2;
18798 }
18799 else if (iv[2] == 0xff) {
18800 return 0;
18801 }
18802 }
18803 k = 0xfe - iv[2];
18804 if ((sum == k) && ((iv[2] >= 0xf2) && (iv[2] <= 0xfe) && (iv[2] != 0xfd))) {
18805 return k;
18806 }
18807 return -1;
18808}
18809
18810static void
18811wlan_retransmit_init(void)
18812{
18813 if (fc_analyse_retransmit_table) {
18814 g_hash_table_destroy(fc_analyse_retransmit_table);
18815 fc_analyse_retransmit_table = NULL((void*)0);
18816 }
18817
18818 if (fc_first_frame_table) {
18819 g_hash_table_destroy(fc_first_frame_table);
18820 fc_first_frame_table = NULL((void*)0);
18821 }
18822
18823 if (wlan_subdissector)
18824 return;
18825
18826 fc_analyse_retransmit_table= g_hash_table_new(retransmit_hash, retransmit_equal);
18827 fc_first_frame_table = g_hash_table_new(frame_hash, frame_equal);
18828
18829}
18830
18831static int
18832dissect_data_encap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
18833{
18834 int offset = 0;
18835 guint8 type;
18836 int tagged_parameter_tree_len;
18837 proto_tree *tagged_tree;
18838
18839 type = tvb_get_guint8(tvb, offset);
18840 proto_tree_add_item(tree, hf_ieee80211_data_encap_payload_type, tvb, offset,
18841 1, ENC_LITTLE_ENDIAN0x80000000);
18842 offset += 1;
18843 switch (type) {
18844 case 1:
18845 col_set_str(pinfo->cinfo, COL_PROTOCOL, "RRB");
18846 /* TODO: IEEE 802.11r */
18847 break;
18848 case 2:
18849 col_set_str(pinfo->cinfo, COL_PROTOCOL, "TDLS");
18850 col_clear(pinfo->cinfo, COL_INFO);
18851 offset += add_ff_action(tree, tvb, pinfo, offset);
18852 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
18853 if (tagged_parameter_tree_len > 0) {
18854 tagged_tree = get_tagged_parameter_tree(tree, tvb, offset,
18855 tagged_parameter_tree_len);
18856 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
18857 tagged_parameter_tree_len, -1);
18858 }
18859 break;
18860 }
18861 return tvb_captured_length(tvb);
18862}
18863
18864void
18865proto_register_ieee80211(void)
18866{
18867
18868 static hf_register_info hf[] = {
18869 {&hf_ieee80211_fc_field,
18870 {"Frame Control Field", "wlan.fc",
18871 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
18872 "MAC Frame control", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
18873
18874 {&hf_ieee80211_fc_proto_version,
18875 {"Version", "wlan.fc.version",
18876 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
18877 "MAC Protocol version", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 0 */
18878
18879 {&hf_ieee80211_fc_frame_type,
18880 {"Type", "wlan.fc.type",
18881 FT_UINT8, BASE_DEC, VALS(frame_type)(const struct _value_string*)(frame_type), 0x0C,
18882 "Frame type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
18883
18884 {&hf_ieee80211_fc_frame_subtype,
18885 {"Subtype", "wlan.fc.subtype",
18886 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF0,
18887 "Frame subtype", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 2 */
18888
18889 {&hf_ieee80211_fc_frame_type_subtype,
18890 {"Type/Subtype", "wlan.fc.type_subtype",
18891 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x200, &frame_type_subtype_vals_ext, 0x0,
18892 "Type and subtype combined (first byte: type, second byte: subtype)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
18893
18894 {&hf_ieee80211_fc_frame_extension,
18895 {"Control Frame Extension", "wlan.fc.extension",
18896 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
18897 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
18898
18899 {&hf_ieee80211_fc_flags,
18900 {"Flags", "wlan.flags",
18901 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
18902 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
18903
18904 {&hf_ieee80211_fc_data_ds,
18905 {"DS status", "wlan.fc.ds",
18906 FT_UINT8, BASE_HEX, VALS(tofrom_ds)(const struct _value_string*)(tofrom_ds), (FLAG_FROM_DS0x02|FLAG_TO_DS0x01),
18907 "Data-frame DS-traversal status", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 3 */
18908
18909 {&hf_ieee80211_fc_to_ds,
18910 {"To DS", "wlan.fc.tods",
18911 FT_BOOLEAN, 8, TFS(&tods_flag)(const struct true_false_string*)(&tods_flag), FLAG_TO_DS0x01,
18912 "To DS flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 4 */
18913
18914 {&hf_ieee80211_fc_from_ds,
18915 {"From DS", "wlan.fc.fromds",
18916 FT_BOOLEAN, 8, TFS(&fromds_flag)(const struct true_false_string*)(&fromds_flag), FLAG_FROM_DS0x02,
18917 "From DS flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 5 */
18918
18919 {&hf_ieee80211_fc_more_frag,
18920 {"More Fragments", "wlan.fc.frag",
18921 FT_BOOLEAN, 8, TFS(&more_fragments)(const struct true_false_string*)(&more_fragments), FLAG_MORE_FRAGMENTS0x04,
18922 "More Fragments flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 6 */
18923
18924 {&hf_ieee80211_fc_retry,
18925 {"Retry", "wlan.fc.retry",
18926 FT_BOOLEAN, 8, TFS(&retry_flags)(const struct true_false_string*)(&retry_flags), FLAG_RETRY0x08,
18927 "Retransmission flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
18928
18929 { &hf_ieee80211_fc_analysis_retransmission,
18930 {"Retransmission", "wlan.analysis.retransmission",
18931 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
18932 "This frame is a suspected wireless retransmission", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
18933
18934 { &hf_ieee80211_fc_analysis_retransmission_frame,
18935 {"Retransmission of frame", "wlan.analysis.retransmission_frame",
18936 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x0,
18937 "This is a retransmission of frame #", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
18938
18939 {&hf_ieee80211_fc_pwr_mgt,
18940 {"PWR MGT", "wlan.fc.pwrmgt",
18941 FT_BOOLEAN, 8, TFS(&pm_flags)(const struct true_false_string*)(&pm_flags), FLAG_POWER_MGT0x10,
18942 "Power management status", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
18943
18944 {&hf_ieee80211_fc_more_data,
18945 {"More Data", "wlan.fc.moredata",
18946 FT_BOOLEAN, 8, TFS(&md_flags)(const struct true_false_string*)(&md_flags), FLAG_MORE_DATA0x20,
18947 "More data flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
18948
18949 {&hf_ieee80211_fc_protected,
18950 {"Protected flag", "wlan.fc.protected",
18951 FT_BOOLEAN, 8, TFS(&protected_flags)(const struct true_false_string*)(&protected_flags), FLAG_PROTECTED0x40,
18952 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
18953
18954 {&hf_ieee80211_fc_order,
18955 {"Order flag", "wlan.fc.order",
18956 FT_BOOLEAN, 8, TFS(&order_flags)(const struct true_false_string*)(&order_flags), FLAG_ORDER0x80,
18957 "Strictly ordered flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
18958
18959 {&hf_ieee80211_assoc_id,
18960 {"Association ID", "wlan.aid",
18961 FT_UINT16, BASE_DEC, NULL((void*)0), 0x3FFF,
18962 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
18963
18964 {&hf_ieee80211_did_duration,
18965 {"Duration", "wlan.duration",
18966 FT_UINT16, BASE_DEC, NULL((void*)0), 0x7FFF,
18967 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
18968
18969 {&hf_ieee80211_addr_da,
18970 {"Destination address", "wlan.da",
18971 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
18972 "Destination Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
18973
18974 { &hf_ieee80211_addr_da_resolved,
18975 {"Destination address (resolved)", "wlan.da_resolved", FT_STRING,
18976 BASE_NONE, NULL((void*)0), 0x0,
18977 "Destination Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
18978
18979 {&hf_ieee80211_addr_sa,
18980 {"Source address", "wlan.sa",
18981 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
18982 "Source Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
18983
18984 { &hf_ieee80211_addr_sa_resolved,
18985 {"Source address (resolved)", "wlan.sa_resolved", FT_STRING,
18986 BASE_NONE, NULL((void*)0), 0x0,
18987 "Source Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
18988
18989 { &hf_ieee80211_addr,
18990 {"Hardware address", "wlan.addr",
18991 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
18992 "SA, DA, BSSID, RA or TA Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
18993
18994 { &hf_ieee80211_addr_resolved,
18995 { "Hardware address (resolved)", "wlan.addr_resolved", FT_STRING,
18996 BASE_NONE, NULL((void*)0), 0x0,
18997 "SA, DA, BSSID, RA or TA Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
18998
18999 {&hf_ieee80211_addr_ra,
19000 {"Receiver address", "wlan.ra",
19001 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
19002 "Receiving Station Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19003
19004 { &hf_ieee80211_addr_ra_resolved,
19005 {"Receiver address (resolved)", "wlan.ra_resolved", FT_STRING, BASE_NONE,
19006 NULL((void*)0), 0x0, "Receiving Station Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19007
19008 {&hf_ieee80211_addr_ta,
19009 {"Transmitter address", "wlan.ta",
19010 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
19011 "Transmitting Station Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19012
19013 { &hf_ieee80211_addr_ta_resolved,
19014 {"Transmitter address (resolved)", "wlan.ta_resolved", FT_STRING,
19015 BASE_NONE, NULL((void*)0), 0x0,
19016 "Transmitting Station Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19017
19018 {&hf_ieee80211_addr_bssid,
19019 {"BSS Id", "wlan.bssid",
19020 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
19021 "Basic Service Set ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19022
19023 { &hf_ieee80211_addr_bssid_resolved,
19024 {"BSS Id (resolved)", "wlan.bssid_resolved", FT_STRING, BASE_NONE, NULL((void*)0),
19025 0x0, "Basic Service Set ID (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19026
19027 {&hf_ieee80211_addr_staa,
19028 {"STA address", "wlan.staa",
19029 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
19030 "Station Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19031
19032 { &hf_ieee80211_addr_staa_resolved,
19033 {"STA address (resolved)", "wlan.staa_resolved", FT_STRING, BASE_NONE, NULL((void*)0),
19034 0x0, "Station Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19035
19036 {&hf_ieee80211_frag_number,
19037 {"Fragment number", "wlan.frag",
19038 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000F,
19039 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19040
19041 {&hf_ieee80211_seq_number,
19042 {"Sequence number", "wlan.seq",
19043 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFFF0,
19044 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19045
19046 {&hf_ieee80211_mesh_control_field,
19047 {"Mesh Control Field", "wlan.mesh.control_field",
19048 FT_NONE, BASE_NONE, NULL((void*)0), 0,
19049 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19050
19051 {&hf_ieee80211_qos,
19052 {"Qos Control", "wlan.qos",
19053 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
19054 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19055
19056 {&hf_ieee80211_qos_tid,
19057 {"TID", "wlan.qos.tid",
19058 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000F,
19059 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19060
19061 {&hf_ieee80211_qos_priority,
19062 {"Priority", "wlan.qos.priority",
19063 FT_UINT16, BASE_DEC, VALS(ieee80211_qos_tags_acs)(const struct _value_string*)(ieee80211_qos_tags_acs), 0x0007,
19064 "802.1D Tag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19065
19066 {&hf_ieee80211_qos_eosp,
19067 {"EOSP", "wlan.qos.eosp",
19068 FT_BOOLEAN, 16, TFS(&eosp_flag)(const struct true_false_string*)(&eosp_flag), QOS_FLAG_EOSP0x0010,
19069 "EOSP Field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19070
19071 {&hf_ieee80211_qos_bit4,
19072 {"QoS bit 4", "wlan.qos.bit4",
19073 FT_BOOLEAN, 16, TFS(&bit4_flag)(const struct true_false_string*)(&bit4_flag), QOS_FLAG_EOSP0x0010,
19074 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19075
19076 {&hf_ieee80211_qos_ack_policy,
19077 {"Ack Policy", "wlan.qos.ack",
19078 FT_UINT16, BASE_HEX, VALS(ack_policy)(const struct _value_string*)(ack_policy), 0x0060,
19079 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19080
19081 {&hf_ieee80211_qos_amsdu_present,
19082 {"Payload Type", "wlan.qos.amsdupresent",
19083 FT_BOOLEAN, 16, TFS(&ieee80211_qos_amsdu_present_flag)(const struct true_false_string*)(&ieee80211_qos_amsdu_present_flag
)
, 0x0080,
19084 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19085
19086 {&hf_ieee80211_qos_txop_limit,
19087 {"TXOP Limit", "wlan.qos.txop_limit",
19088 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFF00,
19089 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19090
19091 {&hf_ieee80211_qos_ps_buf_state,
19092 {"QAP PS Buffer State", "wlan.qos.ps_buf_state",
19093 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFF00,
19094 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19095
19096 {&hf_ieee80211_qos_buf_state_indicated,
19097 {"Buffer State Indicated", "wlan.qos.buf_state_indicated",
19098 FT_BOOLEAN, 16, TFS(&tfs_yes_no)(const struct true_false_string*)(&tfs_yes_no), 0x0200,
19099 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19100
19101 {&hf_ieee80211_qos_highest_pri_buf_ac,
19102 {"Highest-Priority Buffered AC", "wlan.qos.highest_pri_buf_ac",
19103 FT_UINT16, BASE_DEC, VALS(wme_acs)(const struct _value_string*)(wme_acs), 0x0C00,
19104 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19105
19106 {&hf_ieee80211_qos_qap_buf_load,
19107 {"QAP Buffered Load", "wlan.qos.qap_buf_load",
19108 FT_UINT16, BASE_DEC, NULL((void*)0), 0xF000,
19109 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19110
19111 {&hf_ieee80211_qos_txop_dur_req,
19112 {"TXOP Duration Requested", "wlan.qos.txop_dur_req",
19113 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFF00,
19114 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19115
19116 {&hf_ieee80211_qos_queue_size,
19117 {"Queue Size", "wlan.qos.queue_size",
19118 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFF00,
19119 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19120
19121 {&hf_ieee80211_fcs,
19122 {"Frame check sequence", "wlan.fcs",
19123 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
19124 "Frame Check Sequence (FCS)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19125
19126 {&hf_ieee80211_fcs_status,
19127 {"FCS Status", "wlan.fcs.status",
19128 FT_UINT8, BASE_NONE, VALS(proto_checksum_vals)(const struct _value_string*)(proto_checksum_vals), 0x0,
19129 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19130
19131 {&hf_ieee80211_fragment_overlap,
19132 {"Fragment overlap", "wlan.fragment.overlap",
19133 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
19134 "Fragment overlaps with other fragments", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19135
19136 {&hf_ieee80211_fragment_overlap_conflict,
19137 {"Conflicting data in fragment overlap", "wlan.fragment.overlap.conflict",
19138 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
19139 "Overlapping fragments contained conflicting data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19140
19141 {&hf_ieee80211_fragment_multiple_tails,
19142 {"Multiple tail fragments found", "wlan.fragment.multipletails",
19143 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
19144 "Several tails were found when defragmenting the packet", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19145
19146 {&hf_ieee80211_fragment_too_long_fragment,
19147 {"Fragment too long", "wlan.fragment.toolongfragment",
19148 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
19149 "Fragment contained data past end of packet", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19150
19151 {&hf_ieee80211_fragment_error,
19152 {"Defragmentation error", "wlan.fragment.error",
19153 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x0,
19154 "Defragmentation error due to illegal fragments", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19155
19156 {&hf_ieee80211_fragment_count,
19157 {"Fragment count", "wlan.fragment.count",
19158 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
19159 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19160
19161 {&hf_ieee80211_fragment,
19162 {"802.11 Fragment", "wlan.fragment",
19163 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x0,
19164 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19165
19166 {&hf_ieee80211_fragments,
19167 {"802.11 Fragments", "wlan.fragments",
19168 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
19169 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19170
19171 {&hf_ieee80211_reassembled_in,
19172 {"Reassembled 802.11 in frame", "wlan.reassembled_in",
19173 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x0,
19174 "This 802.11 packet is reassembled in this frame", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19175
19176 {&hf_ieee80211_reassembled_length,
19177 {"Reassembled 802.11 length", "wlan.reassembled.length",
19178 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
19179 "The total length of the reassembled payload", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19180
19181 {&hf_ieee80211_wep_iv,
19182 {"Initialization Vector", "wlan.wep.iv",
19183 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
19184 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19185
19186 {&hf_ieee80211_wep_iv_weak,
19187 {"Weak IV", "wlan.wep.weakiv",
19188 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
19189 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
19190
19191 {&hf_ieee80211_tkip_extiv,
19192 {"TKIP Ext. Initialization Vector", "wlan.tkip.extiv",
19193 FT_STRING, BASE_NONE, NULL((void*)0), 0,
19194 "TKIP Extended Initialization Vector", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19195
19196 {&hf_ieee80211_ccmp_extiv,
19197 {"CCMP Ext. Initialization Vector", "wlan.ccmp.extiv",
19198 FT_STRING, BASE_NONE, NULL((void*)0), 0,
19199 "CCMP Extended Initialization Vector", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19200
19201 {&hf_ieee80211_wep_key,
19202 {"Key Index", "wlan.wep.key",
19203 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
19204 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19205
19206 {&hf_ieee80211_wep_icv,
19207 {"WEP ICV", "wlan.wep.icv",
19208 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
19209 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19210
19211 {&hf_ieee80211_fc_analysis_pmk,
19212 {"PMK", "wlan.analysis.pmk",
19213 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
19214 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19215
19216 {&hf_ieee80211_fc_analysis_tk,
19217 {"TK", "wlan.analysis.tk",
19218 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
19219 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19220
19221 {&hf_ieee80211_fc_analysis_gtk,
19222 {"GTK", "wlan.analysis.gtk",
19223 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
19224 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19225
19226 {&hf_ieee80211_block_ack_request_control,
19227 {"Block Ack Request (BAR) Control", "wlan.bar.control",
19228 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
19229 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19230
19231 {&hf_ieee80211_block_ack_control,
19232 {"Block Ack Request Control", "wlan.ba.control",
19233 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
19234 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19235
19236 {&hf_ieee80211_block_ack_control_ack_policy,
19237 {"BAR Ack Policy", "wlan.ba.control.ackpolicy",
19238 FT_BOOLEAN, 16, TFS(&ieee80211_block_ack_control_ack_policy_flag)(const struct true_false_string*)(&ieee80211_block_ack_control_ack_policy_flag
)
, 0x01,
19239 "Block Ack Request (BAR) Ack Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19240
19241 {&hf_ieee80211_block_ack_control_multi_tid,
19242 {"Multi-TID", "wlan.ba.control.multitid",
19243 FT_BOOLEAN, 16, 0, 0x02,
19244 "Multi-Traffic Identifier (TID)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19245
19246 {&hf_ieee80211_block_ack_control_compressed_bitmap,
19247 {"Compressed Bitmap", "wlan.ba.control.cbitmap",
19248 FT_BOOLEAN, 16, 0, 0x04,
19249 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19250
19251 {&hf_ieee80211_block_ack_control_reserved,
19252 {"Reserved", "wlan.ba.control.reserved",
19253 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0ff8,
19254 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19255
19256 {&hf_ieee80211_block_ack_control_basic_tid_info,
19257 {"TID for which a Basic BlockAck frame is requested", "wlan.ba.basic.tidinfo",
19258 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000,
19259 "Traffic Identifier (TID) for which a Basic BlockAck frame is requested", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19260
19261 {&hf_ieee80211_block_ack_control_compressed_tid_info,
19262 {"TID for which a BlockAck frame is requested", "wlan.bar.compressed.tidinfo",
19263 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000,
19264 "Traffic Identifier (TID) for which a BlockAck frame is requested", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19265
19266 {&hf_ieee80211_block_ack_control_multi_tid_info,
19267 {"Number of TIDs Present", "wlan.ba.mtid.tidinfo",
19268 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000,
19269 "Number of Traffic Identifiers (TIDs) Present", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19270
19271 {&hf_ieee80211_block_ack_multi_tid_info,
19272 {"Traffic Identifier (TID) Info", "wlan.ba.mtid.tid",
19273 FT_UINT8, BASE_DEC, 0, 0,
19274 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19275
19276 {&hf_ieee80211_block_ack_multi_tid_reserved,
19277 {"Reserved", "wlan.bar.mtid.tidinfo.reserved",
19278 FT_UINT16, BASE_HEX, 0, 0x0fff,
19279 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19280
19281 {&hf_ieee80211_block_ack_multi_tid_value,
19282 {"Multi-TID Value", "wlan.bar.mtid.tidinfo.value",
19283 FT_UINT16, BASE_HEX, 0, 0xf000,
19284 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19285
19286 {&hf_ieee80211_block_ack_request_type,
19287 {"Block Ack Request Type", "wlan.bar.type",
19288 FT_UINT8, BASE_HEX, VALS(ieee80211_block_ack_request_type_flags)(const struct _value_string*)(ieee80211_block_ack_request_type_flags
)
, 0x06,
19289 "Block Ack Request (BAR) Type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19290
19291 {&hf_ieee80211_block_ack_type,
19292 {"Block Ack Type", "wlan.ba.type",
19293 FT_UINT8, BASE_HEX, VALS(ieee80211_block_ack_type_flags)(const struct _value_string*)(ieee80211_block_ack_type_flags), 0x06,
19294 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19295
19296 {&hf_ieee80211_block_ack_bitmap,
19297 {"Block Ack Bitmap", "wlan.ba.bm",
19298 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
19299 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19300
19301 /* Used for Extended compressed BlockAck */
19302 {&hf_ieee80211_block_ack_RBUFCAP,
19303 {"Block Ack RBUFCAP", "wlan.ba.RBUFCAP",
19304 FT_BOOLEAN, BASE_DEC, NULL((void*)0), 0,
19305 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19306
19307 {&hf_ieee80211_block_ack_bitmap_missing_frame,
19308 {"Missing frame", "wlan.ba.bm.missing_frame",
19309 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
19310 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19311
19312 {&hf_ieee80211_beamform_feedback_seg_retrans_bitmap,
19313 {"Feedback segment Retansmission Bitmap", "wlan.beamform.feedback_seg_retrans_bitmap",
19314 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
19315 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19316
19317 {&hf_ieee80211_vht_ndp_annc_token,
19318 {"Sounding Dialog Token", "wlan.vht_ndp.token",
19319 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
19320 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19321
19322 {&hf_ieee80211_vht_ndp_annc_token_number,
19323 {"Sounding Dialog Token Number", "wlan.vht_ndp.token.number",
19324 FT_UINT8, BASE_DEC, NULL((void*)0), 0xFC,
19325 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19326
19327 {&hf_ieee80211_vht_ndp_annc_token_reserved,
19328 {"Reserved", "wlan.vht_ndp.token.reserved",
19329 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03,
19330 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19331
19332 {&hf_ieee80211_vht_ndp_annc_sta_info,
19333 {"STA Info", "wlan.vht_ndp.sta_info",
19334 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
19335 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19336
19337 {&hf_ieee80211_vht_ndp_annc_sta_info_aid12,
19338 {"AID12", "wlan.vht_ndp.sta_info.aid12",
19339 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0FFF,
19340 "12 least significant bits of the AID of the target STA", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19341
19342 {&hf_ieee80211_vht_ndp_annc_sta_info_feedback_type,
19343 {"Feedback Type", "wlan.vht_ndp.sta_info.feedback_type",
19344 FT_BOOLEAN, 16, TFS(&vht_ndp_annc_sta_info_feedback_type)(const struct true_false_string*)(&vht_ndp_annc_sta_info_feedback_type
)
, 0x1000,
19345 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19346
19347 {&hf_ieee80211_vht_ndp_annc_sta_info_nc_index,
19348 {"Nc Index", "wlan.vht_ndp.sta_info.nc_index",
19349 FT_UINT16, BASE_DEC, VALS(num_plus_one_3bit_flag)(const struct _value_string*)(num_plus_one_3bit_flag), 0xE000,
19350 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19351
19352 {&hf_ieee80211_vht_ndp_annc_sta_info_reserved,
19353 {"Reserved", "wlan.vht_ndp.sta_info.reserved",
19354 FT_UINT16, BASE_HEX, NULL((void*)0), 0xE000,
19355 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19356
19357 {&hf_ieee80211_data_encap_payload_type,
19358 {"Payload Type", "wlan.data_encap.payload_type",
19359 FT_UINT8, BASE_DEC, VALS(ieee80211_data_encap_payload_types)(const struct _value_string*)(ieee80211_data_encap_payload_types
)
, 0,
19360 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19361
19362 {&hf_ieee80211_ff_tdls_action_code,
19363 {"Action code", "wlan_mgt.fixed.action_code",
19364 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x200, &tdls_action_codes_ext, 0,
19365 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19366
19367 {&hf_ieee80211_ff_target_channel,
19368 {"Target Channel", "wlan_mgt.fixed.target_channel",
19369 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
19370 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19371
19372 {&hf_ieee80211_ff_operating_class,
19373 {"Operating Class", "wlan_mgt.fixed.operating_class",
19374 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
19375 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19376
19377 {&hf_ieee80211_ff_wnm_action_code,
19378 {"Action code", "wlan_mgt.fixed.action_code",
19379 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x200, &wnm_action_codes_ext, 0,
19380 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19381
19382 {&hf_ieee80211_ff_unprotected_wnm_action_code,
19383 {"Action code", "wlan_mgt.fixed.action_code",
19384 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x200, &unprotected_wnm_action_codes_ext, 0,
19385 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19386
19387 {&hf_ieee80211_ff_key_data,
19388 {"Key Data", "wlan_mgt.fixed.key_data",
19389 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19390
19391 {&hf_ieee80211_ff_key_data_length,
19392 {"Key Data Length", "wlan_mgt.fixed.key_data_length",
19393 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19394
19395 {&hf_ieee80211_ff_wnm_notification_type,
19396 {"WNM-Notification type", "wlan_mgt.fixed.wnm_notification_type",
19397 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x200, &wnm_notification_types_ext, 0,
19398 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19399
19400 {&hf_ieee80211_ff_rm_action_code,
19401 {"Action code", "wlan_mgt.rm.action_code",
19402 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x200, &rm_action_codes_ext, 0,
19403 "Radio Measurement Action", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19404
19405 {&hf_ieee80211_ff_rm_dialog_token,
19406 {"Dialog token", "wlan_mgt.rm.dialog_token",
19407 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
19408 "Non-zero Dialog Token identifies request/report transaction", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19409
19410 {&hf_ieee80211_ff_rm_repetitions,
19411 {"Repetitions", "wlan_mgt.rm.repetitions",
19412 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
19413 "Numer of Repetitions, 65535 indicates repeat until cancellation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19414
19415 {&hf_ieee80211_ff_rm_tx_power,
19416 {"Transmit Power Used", "wlan_mgt.rm.tx_power",
19417 FT_INT8, BASE_DEC, NULL((void*)0), 0,
19418 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19419
19420 {&hf_ieee80211_ff_rm_max_tx_power,
19421 {"Max Transmit Power", "wlan_mgt.rm.max_tx_power",
19422 FT_INT8, BASE_DEC, NULL((void*)0), 0,
19423 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19424
19425 {&hf_ieee80211_ff_tpc,
19426 {"TPC Report", "wlan_mgt.rm.tpc",
19427 FT_NONE, BASE_NONE, NULL((void*)0), 0,
19428 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19429
19430 {&hf_ieee80211_ff_tpc_element_id,
19431 {"TPC Element ID", "wlan_mgt.rm.tpc.element_id",
19432 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
19433 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19434
19435 {&hf_ieee80211_ff_tpc_length,
19436 {"TPC Length", "wlan_mgt.rm.tpc.length",
19437 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
19438 "Length of TPC Report element (always 2)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19439
19440 {&hf_ieee80211_ff_tpc_tx_power,
19441 {"TPC Transmit Power", "wlan_mgt.rm.tpc.tx_power",
19442 FT_INT8, BASE_DEC, NULL((void*)0), 0,
19443 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19444
19445 {&hf_ieee80211_ff_tpc_link_margin,
19446 {"TPC Link Margin", "wlan_mgt.rm.tpc.link_margin",
19447 FT_INT8, BASE_DEC, NULL((void*)0), 0,
19448 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19449
19450 {&hf_ieee80211_ff_rm_rx_antenna_id,
19451 {"Receive Antenna ID", "wlan_mgt.rm.rx_antenna_id",
19452 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
19453 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19454
19455 {&hf_ieee80211_ff_rm_tx_antenna_id,
19456 {"Transmit Antenna ID", "wlan_mgt.rm.tx_antenna_id",
19457 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
19458 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19459
19460 {&hf_ieee80211_ff_rm_rcpi,
19461 {"Received Channel Power", "wlan_mgt.rm.rcpi",
19462 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
19463 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19464
19465 {&hf_ieee80211_ff_rm_rsni,
19466 {"Received Signal to noise indication", "wlan_mgt.rm.rsni",
19467 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
19468 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19469
19470 {&hf_ieee80211_ff_request_mode_pref_cand,
19471 {"Preferred Candidate List Included", "wlan_mgt.fixed.request_mode.pref_cand",
19472 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
19473 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19474
19475 {&hf_ieee80211_ff_request_mode_abridged,
19476 {"Abridged", "wlan_mgt.fixed.request_mode.abridged",
19477 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
19478 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19479
19480 {&hf_ieee80211_ff_request_mode_disassoc_imminent,
19481 {"Disassociation Imminent", "wlan_mgt.fixed.request_mode.disassoc_imminent",
19482 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
19483 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19484
19485 {&hf_ieee80211_ff_request_mode_bss_term_included,
19486 {"BSS Termination Included", "wlan_mgt.fixed.request_mode.bss_term_included",
19487 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
19488 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19489
19490 {&hf_ieee80211_ff_request_mode_ess_disassoc_imminent,
19491 {"ESS Disassociation Imminent", "wlan_mgt.fixed.request_mode.ess_disassoc_imminent",
19492 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
19493 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19494
19495 {&hf_ieee80211_ff_disassoc_timer,
19496 {"Disassociation Timer", "wlan_mgt.fixed.disassoc_timer",
19497 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
19498 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19499
19500 {&hf_ieee80211_ff_bss_termination_delay,
19501 {"BSS Termination Delay", "wlan_mgt.fixed.bss_termination_delay",
19502 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
19503 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19504
19505 {&hf_ieee80211_ff_bss_transition_status_code,
19506 {"BSS Transition Status Code", "wlan_mgt.fixed.bss_transition_status_code",
19507 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
19508 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19509
19510 {&hf_ieee80211_ff_validity_interval,
19511 {"Validity Interval", "wlan_mgt.fixed.validity_interval",
19512 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
19513 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19514
19515 {&hf_ieee80211_ff_bss_termination_duration,
19516 {"BSS Termination Duration", "wlan_mgt.fixed.bss_termination_duration",
19517 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
19518 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19519
19520 {&hf_ieee80211_ff_url_len,
19521 {"Session Information URL Length",
19522 "wlan_mgt.fixed.session_information.url_length",
19523 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
19524 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19525
19526 {&hf_ieee80211_ff_url,
19527 {"Session Information URL", "wlan_mgt.fixed.session_information.url",
19528 FT_STRING, BASE_NONE, NULL((void*)0), 0,
19529 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19530
19531 {&hf_ieee80211_ff_target_bss,
19532 {"BSS Transition Target BSS", "wlan_mgt.fixed.bss_transition_target_bss",
19533 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
19534 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19535
19536 {&hf_ieee80211_ff_bss_transition_candidate_list_entries,
19537 {"BSS Transition Candidate List Entries", "wlan_mgt.fixed.bss_transition_candidate_list_entries",
19538 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
19539 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19540
19541/* 802.11ad */
19542 {&hf_ieee80211_cf_response_offset,
19543 {"Response Offset", "wlan.res_offset",
19544 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
19545 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19546
19547 {&hf_ieee80211_ff_dynamic_allocation,
19548 {"Response Offset", "wlan.dynamic_allocation",
19549 FT_UINT64, BASE_HEX, NULL((void*)0), 0,
19550 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19551
19552 {&hf_ieee80211_ff_TID,
19553 {"Response Offset", "wlan.dynamic_allocation.TID",
19554 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
19555 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19556
19557 {&hf_ieee80211_ff_alloc_type,
19558 {"Response Offset", "wlan.dynamic_allocation.alloc_type",
19559 FT_UINT8, BASE_DEC, NULL((void*)0), 0x70,
19560 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19561
19562 {&hf_ieee80211_ff_src_aid,
19563 {"Response Offset", "wlan.dynamic_allocation.src_aid",
19564 FT_UINT16, BASE_DEC, NULL((void*)0), 0x7f80,
19565 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19566
19567 {&hf_ieee80211_ff_dest_aid,
19568 {"Response Offset", "wlan.dynamic_allocation.dest_aid",
19569 FT_UINT16, BASE_DEC, NULL((void*)0), 0x7f80,
19570 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19571
19572 {&hf_ieee80211_ff_alloc_duration,
19573 {"Response Offset", "wlan.dynamic_allocation.alloc_duration",
19574 FT_UINT32, BASE_CUSTOM, CF_FUNC(allocation_duration_base_custom)((const void *) (gsize) (allocation_duration_base_custom)), 0x7fff80,
19575 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19576
19577 {&hf_ieee80211_ff_ssw,
19578 {"Sector Sweep", "wlan.ssw",
19579 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
19580 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19581
19582 {&hf_ieee80211_ff_ssw_direction,
19583 {"Sector Sweep Direction", "wlan.ssw.direction",
19584 FT_BOOLEAN, 24, TFS(&ieee80211_cf_ssw_direction)(const struct true_false_string*)(&ieee80211_cf_ssw_direction
)
, 0x000001,
19585 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
19586
19587 {&hf_ieee80211_ff_ssw_cdown,
19588 {"Sector Sweep CDOWN", "wlan.ssw.cdown",
19589 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0003fe,
19590 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19591
19592 {&hf_ieee80211_ff_ssw_sector_id,
19593 {"Sector Sweep Sector ID", "wlan.ssw.sector_id",
19594 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00fc00,
19595 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19596
19597 {&hf_ieee80211_ff_ssw_dmg_ant_id,
19598 {"Sector Sweep DMG Antenna ID", "wlan.ssw.dmg_ant_id",
19599 FT_UINT24, BASE_DEC, NULL((void*)0), 0x030000,
19600 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19601
19602 {&hf_ieee80211_ff_ssw_rxss_len,
19603 {"Sector Sweep RXSS Length", "wlan.ssw.rxss_len",
19604 FT_UINT24, BASE_DEC, NULL((void*)0), 0xfc0000,
19605 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19606
19607 {&hf_ieee80211_ff_bf,
19608 {"Beam Forming", "wlan.bf",
19609 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
19610 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19611
19612 {&hf_ieee80211_ff_bf_train,
19613 {"Beam Forming Training", "wlan.bf.train",
19614 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
19615 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19616
19617 {&hf_ieee80211_ff_bf_is_init,
19618 {"Beam Forming Is InitiatorTXSS", "wlan.bf.isInit",
19619 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
19620 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19621
19622 {&hf_ieee80211_ff_bf_is_resp,
19623 {"Beam Forming Is ResponderTXSS", "wlan.bf.isResp",
19624 FT_BOOLEAN, 8, NULL((void*)0), 0x4,
19625 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19626
19627 {&hf_ieee80211_ff_bf_rxss_len,
19628 {"Beam Forming RXSS Length", "wlan.bf.rxss_len",
19629 FT_UINT16, BASE_DEC, NULL((void*)0), 0x1f8,
19630 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19631
19632 {&hf_ieee80211_ff_bf_rxss_rate,
19633 {"Beam Forming RXSS Rate", "wlan.bf.rxss_rate",
19634 FT_BOOLEAN, 16, NULL((void*)0), 0x200,
19635 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19636
19637 {&hf_ieee80211_ff_bf_num_sectors,
19638 {"Beam Forming Total Number of Sectors", "wlan.bf.num_sectors",
19639 FT_UINT16, BASE_DEC, NULL((void*)0), 0x3f8,
19640 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19641
19642 {&hf_ieee80211_ff_bf_num_rx_dmg_ants,
19643 {"Beam Forming Number of DMG Antennas", "wlan.bf.num_dmg_ants",
19644 FT_UINT16, BASE_DEC, NULL((void*)0), 0xc00,
19645 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19646
19647 {&hf_ieee80211_addr_nav_da,
19648 {"Destination address of STA that caused NAV update", "wlan.nav_da",
19649 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
19650 "DMG Destination Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19651
19652 {&hf_ieee80211_addr_nav_sa,
19653 {"Source address of STA that caused NAV update", "wlan.nav_sa",
19654 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
19655 "DMG Source Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19656
19657 {&hf_ieee80211_ff_sswf,
19658 {"Sector Sweep Feedback", "wlan.sswf",
19659 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
19660 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19661
19662 {&hf_ieee80211_ff_sswf_total_sectors,
19663 {"Sector Sweep Feedback total number of sectors", "wlan.sswf.num_sectors",
19664 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0001ff,
19665 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19666
19667 {&hf_ieee80211_ff_sswf_num_rx_dmg_ants,
19668 {"Sector Sweep Feedback Number of receive DMG Antennas", "wlan.sswf.num_dmg_ants",
19669 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000600,
19670 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19671
19672 {&hf_ieee80211_ff_sswf_poll_required,
19673 {"Sector Sweep Feedback Poll required", "wlan.sswf.poll",
19674 FT_BOOLEAN, 24, NULL((void*)0), 0x010000,
19675 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19676
19677 {&hf_ieee80211_ff_brp,
19678 {"BRP Request", "wlan.brp",
19679 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
19680 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19681
19682 {&hf_ieee80211_ff_brp_L_RX,
19683 {"BRP Request L-RX", "wlan.brp.l_rx",
19684 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0000001f,
19685 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19686
19687 {&hf_ieee80211_ff_brp_TX_TRN_REQ,
19688 {"BRP Request TX-TRN-REQ", "wlan.brp.tx_trn_req",
19689 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020,
19690 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19691
19692 {&hf_ieee80211_ff_brp_MID_REQ,
19693 {"BRP Request MID-REQ", "wlan.brp.mid_req",
19694 FT_BOOLEAN, 32, NULL((void*)0), 0x00000040,
19695 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19696
19697 {&hf_ieee80211_ff_brp_BC_REQ,
19698 {"BRP Request BC-REQ", "wlan.brp.bc_req",
19699 FT_BOOLEAN, 32, NULL((void*)0), 0x00000080,
19700 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19701
19702 {&hf_ieee80211_ff_brp_MID_GRANT,
19703 {"BRP Request MID-GRANT", "wlan.brp.mid_grant",
19704 FT_BOOLEAN, 32, NULL((void*)0), 0x00000100,
19705 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19706
19707 {&hf_ieee80211_ff_brp_BC_GRANT,
19708 {"BRP Request BC-GRANT", "wlan.brp.bc_grant",
19709 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200,
19710 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19711
19712 {&hf_ieee80211_ff_brp_chan_FBCK_CAP,
19713 {"BRP Request Chan FBCK-CAP", "wlan.brp.chan_fbck_cap",
19714 FT_BOOLEAN, 32, NULL((void*)0), 0x00000400,
19715 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19716
19717 {&hf_ieee80211_ff_brp_tx_sector,
19718 {"BRP Request TX Sector ID", "wlan.brp.tx_sector_id",
19719 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0001f800,
19720 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19721
19722 {&hf_ieee80211_ff_brp_other_aid,
19723 {"BRP Request Other AID", "wlan.brp.other_aid",
19724 FT_UINT32, BASE_DEC, NULL((void*)0), 0x01fe0000,
19725 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19726
19727 {&hf_ieee80211_ff_brp_tx_antenna,
19728 {"BRP Request TX Antenna ID", "wlan.brp.tx_antenna_id",
19729 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0600000,
19730 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19731
19732 {&hf_ieee80211_ff_blm,
19733 {"Beamformed Link Maintenance", "wlan.blm",
19734 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
19735 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19736
19737 {&hf_ieee80211_ff_blm_unit_index,
19738 {"BeamLink Maintenance Uint Index", "wlan.blm.uint_index",
19739 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
19740 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19741
19742 {&hf_ieee80211_ff_blm_maint_value,
19743 {"BeamLink Maintenance Value", "wlan.blm.value",
19744 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7e,
19745 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19746
19747 {&hf_ieee80211_ff_blm_is_master,
19748 {"BeamLink Is Master", "wlan.blm.is_master",
19749 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
19750 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19751
19752 {&hf_ieee80211_ff_bic,
19753 {"Beacon Interval Control", "wlan.bic",
19754 FT_UINT48, BASE_HEX, NULL((void*)0), 0,
19755 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19756
19757 {&hf_ieee80211_ff_bic_cc_present,
19758 {"Clustering Control Present", "wlan.bic.cc",
19759 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
19760 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19761
19762 {&hf_ieee80211_ff_bic_discovery_mode,
19763 {"Discovery Mode", "wlan.bic.discovery_mode",
19764 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
19765 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19766
19767 {&hf_ieee80211_ff_bic_next_beacon,
19768 {"Next Beacon", "wlan.bic.next_beacon",
19769 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3c,
19770 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19771
19772 {&hf_ieee80211_ff_bic_ati_present,
19773 {"ATI Present", "wlan.bic.ati",
19774 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
19775 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19776
19777 {&hf_ieee80211_ff_bic_abft_len,
19778 {"A-BFT length", "wlan.bic.abft_len",
19779 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0380,
19780 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19781
19782 {&hf_ieee80211_ff_bic_fss,
19783 {"FSS", "wlan.bic.fss",
19784 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3c,
19785 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19786
19787 {&hf_ieee80211_ff_bic_is_resp,
19788 {"Is TXSS Responder", "wlan.bic.is_responder",
19789 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
19790 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19791
19792 {&hf_ieee80211_ff_bic_next_abft,
19793 {"Next A-BFT", "wlan.bic.next_abft",
19794 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0780,
19795 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19796
19797 {&hf_ieee80211_ff_bic_frag_txss,
19798 {"Fragmented TXSS", "wlan.bic.frag_txss",
19799 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
19800 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19801
19802 {&hf_ieee80211_ff_bic_txss_span,
19803 {"TXSS span", "wlan.bic.txss_span",
19804 FT_UINT16, BASE_DEC, NULL((void*)0), 0x07f0,
19805 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19806
19807 {&hf_ieee80211_ff_bic_NBI_abft,
19808 {"Number of Beacon Intervals that are needed to allocate A-BFT", "wlan.bic.NBI_abft",
19809 FT_UINT8, BASE_DEC, NULL((void*)0), 0x78,
19810 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19811
19812 {&hf_ieee80211_ff_bic_abft_count,
19813 {"A-BFT Count", "wlan.bic.abft_count",
19814 FT_UINT16, BASE_DEC, NULL((void*)0), 0x1f80,
19815 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19816
19817 {&hf_ieee80211_ff_bic_nabft,
19818 {"Number of A-BFT's received from each Antenna", "wlan.bic.nabft",
19819 FT_UINT16, BASE_DEC, NULL((void*)0), 0x07e0,
19820 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19821
19822 {&hf_ieee80211_ff_bic_pcp,
19823 {"PCP Association Ready", "wlan.bic.pcp",
19824 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
19825 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19826
19827 {&hf_ieee80211_ff_dmg_params,
19828 {"DMG Parameters", "wlan.dmg_params",
19829 FT_UINT8, BASE_HEX , NULL((void*)0), 0,
19830 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19831
19832 {&hf_ieee80211_ff_dmg_params_bss,
19833 {"BSS Type", "wlan.dmg_params.bss",
19834 FT_UINT8, BASE_DEC, VALS(bss_type)(const struct _value_string*)(bss_type), 0x03,
19835 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19836
19837 {&hf_ieee80211_ff_dmg_params_cbap_only,
19838 {"CBAP Only", "wlan.dmp_params.cbap_only",
19839 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
19840 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19841
19842 {&hf_ieee80211_ff_dmg_params_cbap_src,
19843 {"CBAP Source", "wlan.dmp_params.cbap_src",
19844 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
19845 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19846
19847 {&hf_ieee80211_ff_dmg_params_privacy,
19848 {"DMG Privacy", "wlan.dmp_params.privacy",
19849 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
19850 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19851
19852 {&hf_ieee80211_ff_dmg_params_policy,
19853 {"ECPAC Policy Enforced", "wlan.dmp_params.policy",
19854 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
19855 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19856
19857 {&hf_ieee80211_ff_cc,
19858 {"Clustering Control", "wlan.cc",
19859 FT_UINT64, BASE_HEX , NULL((void*)0), 0,
19860 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19861
19862 {&hf_ieee80211_ff_cc_abft_resp_addr,
19863 {"A-BFT Responder Address", "wlan.cc.abft_resp_addr",
19864 FT_ETHER, BASE_NONE , NULL((void*)0), 0,
19865 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19866
19867 {&hf_ieee80211_ff_cc_sp_duration,
19868 {"Beacon SP Duration", "wlan.cc.sp_duration",
19869 FT_UINT8, BASE_DEC , NULL((void*)0), 0,
19870 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19871
19872 {&hf_ieee80211_ff_cc_cluster_id,
19873 {"Cluster ID", "wlan.cc.cluster_id",
19874 FT_UINT64, BASE_DEC , NULL((void*)0), 0,
19875 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19876
19877 {&hf_ieee80211_ff_cc_role,
19878 {"Cluster Member Role", "wlan.cc.rold",
19879 FT_UINT8, BASE_DEC , NULL((void*)0), 0,
19880 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19881
19882 {&hf_ieee80211_ff_cc_max_mem,
19883 {"Cluster MaxMem", "wlan.cc.max_mem",
19884 FT_UINT8, BASE_DEC , NULL((void*)0), 0,
19885 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19886
19887 {&hf_ieee80211_tag_relay_support,
19888 {"Relay Supportability", "wlan.relay_capabilities.relay_support",
19889 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
19890 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19891
19892 {&hf_ieee80211_tag_relay_use,
19893 {"Relay Usability", "wlan.relay_capabilities.relay_use",
19894 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
19895 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19896
19897 {&hf_ieee80211_tag_relay_permission,
19898 {"Relay Permission", "wlan.relay_capabilities.relay_permission",
19899 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
19900 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19901
19902 {&hf_ieee80211_tag_AC_power,
19903 {"A/C Power", "wlan.relay_capabilities.AC_power",
19904 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
19905 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19906
19907 {&hf_ieee80211_tag_relay_prefer,
19908 {"Relay Preference", "wlan.relay_capabilities.relay_prefer",
19909 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
19910 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19911
19912 {&hf_ieee80211_tag_duplex,
19913 {"Duplex", "wlan.relay_capabilities.duplex",
19914 FT_UINT8, BASE_DEC, NULL((void*)0), 0x60,
19915 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19916
19917 {&hf_ieee80211_tag_cooperation,
19918 {"Cooperation", "wlan.relay_capabilities.cooperation",
19919 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
19920 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19921
19922#if 0
19923 {&hf_ieee80211_ff_rcsi,
19924 {"Relay Capable STA Info", "wlan.rcsi",
19925 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
19926 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19927
19928 {&hf_ieee80211_ff_rcsi_aid,
19929 {"AID", "wlan.rcsi.aid",
19930 FT_UINT8, BASE_DEC, NULL((void*)0), 0xff,
19931 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19932#endif
19933
19934 {&hf_ieee80211_ff_band_id,
19935 {"Band ID", "wlan.band_id",
19936 FT_UINT8, BASE_DEC, VALS(band_id)(const struct _value_string*)(band_id), 0xff,
19937 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19938
19939 {&hf_ieee80211_tag_move,
19940 {"Move", "wlan.dmg_bss_param_change.move",
19941 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
19942 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19943
19944 {&hf_ieee80211_tag_size,
19945 {"Size", "wlan.dmg_bss_param_change.size",
19946 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
19947 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19948
19949 {&hf_ieee80211_tag_tbtt_offset,
19950 {"TBTT Offset", "wlan.dmg_bss_param_change.tbtt_offset",
19951 FT_UINT32, BASE_CUSTOM, CF_FUNC(allocation_duration_base_custom)((const void *) (gsize) (allocation_duration_base_custom)), 0xffffffff,
19952 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19953
19954 {&hf_ieee80211_tag_bi_duration,
19955 {"BI Duration", "wlan.dmg_bss_param_change.bi_duration",
19956 FT_UINT16, BASE_DEC, NULL((void*)0), 0xffff,
19957 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19958
19959 {&hf_ieee80211_tag_dmg_capa_sta_addr,
19960 {"STA Address", "wlan.dmg_capa.sta_addr",
19961 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
19962 "STA_Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19963
19964 {&hf_ieee80211_tag_dmg_capa_aid,
19965 {"AID", "wlan.dmg_capa.aid",
19966 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
19967 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19968/* 8.4.2.127.2 DMG STA Capability Information field */
19969 {&hf_ieee80211_tag_reverse_direction, /* DMG STA capa, bits [0] */
19970 {"Reverse Direction", "wlan.dmg_capa.reverse_direction",
19971 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(0, 0)(((1U << ((0) - (0) + 1)) - 1) << (0)),
19972 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19973
19974 {&hf_ieee80211_tag_hlts, /* DMG STA capa, bits [1] */
19975 {"Higher Layer Timer Synchronization", "wlan.dmg_capa.htls",
19976 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(1, 1)(((1U << ((1) - (1) + 1)) - 1) << (1)),
19977 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19978
19979 {&hf_ieee80211_tag_tpc, /* DMG STA capa, bits [2] */
19980 {"TPC", "wlan.dmg_capa.tpc",
19981 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(2, 2)(((1U << ((2) - (2) + 1)) - 1) << (2)),
19982 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19983
19984 {&hf_ieee80211_tag_spsh, /* DMG STA capa, bits [3] */
19985 {"SPSH and Interference Mitigation", "wlan.dmg_capa.spsh",
19986 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(3, 3)(((1U << ((3) - (3) + 1)) - 1) << (3)),
19987 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19988
19989 {&hf_ieee80211_tag_rx_antenna, /* DMG STA capa, bits [4..5] */
19990 {"Number of RX DMG Antennas", "wlan.dmg_capa.num_rx",
19991 FT_UINT24, BASE_CUSTOM, CF_FUNC(extra_one_base_custom)((const void *) (gsize) (extra_one_base_custom)), GENMASK(5, 4)(((1U << ((5) - (4) + 1)) - 1) << (4)),
19992 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19993
19994 {&hf_ieee80211_tag_fast_link, /* DMG STA capa, bits [6] */
19995 {"Fast Link Adaptation", "wlan.dmg_capa.fast_link",
19996 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(6, 6)(((1U << ((6) - (6) + 1)) - 1) << (6)),
19997 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
19998
19999 {&hf_ieee80211_tag_num_sectors, /* DMG STA capa, bits [7..13] */
20000 {"Total Number of Sectors", "wlan.dmg_capa.num_sectors",
20001 FT_UINT24, BASE_CUSTOM, CF_FUNC(extra_one_base_custom)((const void *) (gsize) (extra_one_base_custom)), GENMASK(13, 7)(((1U << ((13) - (7) + 1)) - 1) << (7)),
20002 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20003
20004 {&hf_ieee80211_tag_rxss_length, /* DMG STA capa, bits [14..19] */
20005 {"RXSS Length", "wlan.dmg_capa.rxss_len",
20006 FT_UINT24, BASE_CUSTOM, CF_FUNC(extra_one_mul_two_base_custom)((const void *) (gsize) (extra_one_mul_two_base_custom)), GENMASK(19, 14)(((1U << ((19) - (14) + 1)) - 1) << (14)),
20007 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20008
20009 {&hf_ieee80211_tag_reciprocity, /* DMG STA capa, bits [20] */
20010 {"DMG Antenna Reciprocity", "wlan.dmg_capa.reciprocity",
20011 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(20, 20)(((1U << ((20) - (20) + 1)) - 1) << (20)),
20012 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20013/* DMG STA capa, A-MPDU params, bits [21..26] */
20014 {&hf_ieee80211_tag_max_ampdu_exp, /* DMG STA capa, bits [21..23] */
20015 {"Maximum A-MPDU Length Exponent", "wlan.dmg_capa.max_ampdu_exp",
20016 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(23, 21)(((1U << ((23) - (21) + 1)) - 1) << (21)),
20017 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20018
20019 {&hf_ieee80211_tag_min_mpdu_sapcing, /* DMG STA capa, bits [24..26] */
20020 {"Minimum MPDU Start Spacing", "wlan.dmg_capa.min_mpdu_spacing",
20021 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(26-24, 24-24)(((1U << ((26-24) - (24-24) + 1)) - 1) << (24-24)
)
,
20022 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20023
20024 {&hf_ieee80211_tag_ba_flow_control , /* DMG STA capa, bits [27] */
20025 {"BA with Flow Control", "wlan.dmg_capa.bs_flow_ctrl",
20026 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(27-24, 27-24)(((1U << ((27-24) - (27-24) + 1)) - 1) << (27-24)
)
,
20027 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20028/* DMG STA capa, supported MCS set, bits [28..51] */
20029 {&hf_ieee80211_tag_max_sc_rx_mcs, /* DMG STA capa, bits [28..32] */
20030 {"Maximum SC Rx MCS", "wlan.dmg_capa.max_sc_rx_mcs",
20031 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(32-24, 28-24)(((1U << ((32-24) - (28-24) + 1)) - 1) << (28-24)
)
,
20032 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20033
20034 {&hf_ieee80211_tag_max_ofdm_rx_mcs, /* DMG STA capa, bits [33..37] */
20035 {"Maximum OFDM Rx MCS", "wlan.dmg_capa.max_ofdm_rx_mcs",
20036 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(37-24, 33-24)(((1U << ((37-24) - (33-24) + 1)) - 1) << (33-24)
)
,
20037 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20038
20039 {&hf_ieee80211_tag_max_sc_tx_mcs, /* DMG STA capa, bits [38..42] */
20040 {"Maximum SC Tx MCS", "wlan.dmg_capa.max_sc_tx_mcs",
20041 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(42-24, 38-24)(((1U << ((42-24) - (38-24) + 1)) - 1) << (38-24)
)
,
20042 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20043
20044 {&hf_ieee80211_tag_max_ofdm_tx_mcs, /* DMG STA capa, bits [43..47] */
20045 {"Maximum OFDM Tx MCS", "wlan.dmg_capa.max_ofdm_tx_mcs",
20046 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(47-24, 43-24)(((1U << ((47-24) - (43-24) + 1)) - 1) << (43-24)
)
,
20047 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20048
20049 {&hf_ieee80211_tag_low_power_supported, /* DMG STA capa, bits [48] */
20050 {"Low Power SC PHY Supported", "wlan.dmg_capa.low_power_suuported",
20051 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(48-48, 48-48)(((1U << ((48-48) - (48-48) + 1)) - 1) << (48-48)
)
,
20052 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20053
20054 {&hf_ieee80211_tag_code_rate, /* DMG STA capa, bits [49] */
20055 {"Code Rate 13/16", "wlan.dmg_capa.code_rate",
20056 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(49-48, 49-48)(((1U << ((49-48) - (49-48) + 1)) - 1) << (49-48)
)
,
20057 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20058
20059 {&hf_ieee80211_tag_dtp, /* DMG STA capa, bits [52] */
20060 {"DTP Supported", "wlan.dmg_capa.dtp",
20061 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(52-48, 52-48)(((1U << ((52-48) - (52-48) + 1)) - 1) << (52-48)
)
,
20062 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20063
20064 {&hf_ieee80211_tag_appdu_supp, /* DMG STA capa, bits [53] */
20065 {"A-PPDU Supported", "wlan.dmg_capa.appdu_supp",
20066 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(53-48, 53-48)(((1U << ((53-48) - (53-48) + 1)) - 1) << (53-48)
)
,
20067 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20068
20069 {&hf_ieee80211_tag_heartbeat, /* DMG STA capa, bits [54] */
20070 {"HeartBeat", "wlan.dmg_capa.heartbeat",
20071 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(54-48, 54-48)(((1U << ((54-48) - (54-48) + 1)) - 1) << (54-48)
)
,
20072 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20073
20074 {&hf_ieee80211_tag_other_aid, /* DMG STA capa, bits [55] */
20075 {"Supports Other_AID", "wlan.dmg_capa.other_aid",
20076 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(55-48, 55-48)(((1U << ((55-48) - (55-48) + 1)) - 1) << (55-48)
)
,
20077 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20078
20079 {&hf_ieee80211_tag_pattern_recip, /* DMG STA capa, bits [56] */
20080 {"Antenna Pattern Reciprocity", "wlan.dmg_capa.pattern_recip",
20081 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(56-48, 56-48)(((1U << ((56-48) - (56-48) + 1)) - 1) << (56-48)
)
,
20082 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20083
20084 {&hf_ieee80211_tag_heartbeat_elapsed, /* DMG STA capa, bits [57..59] */
20085 {"Heartbeat Elapsed Indication", "wlan.dmg_capa.heartbeat_elapsed",
20086 FT_UINT16, BASE_DEC, NULL((void*)0), GENMASK(59-48, 57-48)(((1U << ((59-48) - (57-48) + 1)) - 1) << (57-48)
)
,
20087 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20088
20089 {&hf_ieee80211_tag_grant_ack_supp, /* DMG STA capa, bits [60] */
20090 {"Grant ACK Supported", "wlan.dmg_capa.grant_ack_supp",
20091 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(60-48, 60-48)(((1U << ((60-48) - (60-48) + 1)) - 1) << (60-48)
)
,
20092 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20093
20094 {&hf_ieee80211_tag_RXSSTxRate_supp, /* DMG STA capa, bits [61] */
20095 {"RXSSTxRate Supported", "wlan.dmg_capa.RXSSTxRate",
20096 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(61-48, 61-48)(((1U << ((61-48) - (61-48) + 1)) - 1) << (61-48)
)
,
20097 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20098/* 8.4.2.127.3 DMG PCP/AP Capability Information field */
20099 {&hf_ieee80211_tag_pcp_tddti, /* DMG PCP/AP capa, bits [0] */
20100 {"TDDTI", "wlan.dmg_capa.pcp_tdtti",
20101 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(0, 0)(((1U << ((0) - (0) + 1)) - 1) << (0)),
20102 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20103
20104 {&hf_ieee80211_tag_pcp_PSA, /* DMG PCP/AP capa, bits [1] */
20105 {"Pseudo-static Allocations", "wlan.dmg_capa.pcp_psa",
20106 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(1, 1)(((1U << ((1) - (1) + 1)) - 1) << (1)),
20107 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20108
20109 {&hf_ieee80211_tag_pcp_handover, /* DMG PCP/AP capa, bits [2] */
20110 {"PDP Handover", "wlan.dmg_capa.pcp_handover",
20111 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(2, 2)(((1U << ((2) - (2) + 1)) - 1) << (2)),
20112 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20113
20114 {&hf_ieee80211_tag_pcp_max_assoc, /* DMG PCP/AP capa, bits [3..10] */
20115 {"Max Associated STA Number", "wlan.dmg_capa.pcp_max_assoc",
20116 FT_UINT16, BASE_DEC, NULL((void*)0), GENMASK(10, 3)(((1U << ((10) - (3) + 1)) - 1) << (3)),
20117 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20118
20119 {&hf_ieee80211_tag_pcp_power_src, /* DMG PCP/AP capa, bits [11] */
20120 {"Power Source", "wlan.dmg_capa.pcp_power_src",
20121 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(11, 11)(((1U << ((11) - (11) + 1)) - 1) << (11)),
20122 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20123
20124 {&hf_ieee80211_tag_pcp_decenter, /* DMG PCP/AP capa, bits [12] */
20125 {"Decentralized PCP/AP Clustering", "wlan.dmg_capa.pcp_decenter",
20126 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(12, 12)(((1U << ((12) - (12) + 1)) - 1) << (12)),
20127 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20128
20129 {&hf_ieee80211_tag_pcp_forwarding, /* DMG PCP/AP capa, bits [13] */
20130 {"PCP Forwarding", "wlan.dmg_capa.pcp_forwarding",
20131 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(13, 13)(((1U << ((13) - (13) + 1)) - 1) << (13)),
20132 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20133
20134 {&hf_ieee80211_tag_pcp_center, /* DMG PCP/AP capa, bits [14] */
20135 {"Centralized PCP/AP Clustering", "wlan.dmg_capa.pcp_center",
20136 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(14, 14)(((1U << ((14) - (14) + 1)) - 1) << (14)),
20137 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20138
20139 {&hf_ieee80211_tag_PSRSI,
20140 {"PS Request Suspension Interval", "wlan.dmg_oper.psrsi",
20141 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
20142 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20143
20144 {&hf_ieee80211_tag_min_BHI_duration,
20145 {"Min BHI Duration", "wlan.dmg_oper.min_BHI_duration",
20146 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
20147 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20148
20149 {&hf_ieee80211_tag_brdct_sta_info_dur,
20150 {"Broadcast STA Info Duration", "wlan.dmg_oper.brdcst_sta_info_dur",
20151 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
20152 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20153
20154 {&hf_ieee80211_tag_assoc_resp_confirm_time,
20155 {"Associated Response Confirm Time", "wlan.dmg_oper.assoc_resp_confirm_time",
20156 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
20157 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20158
20159 {&hf_ieee80211_tag_min_pp_duration,
20160 {"Min PP Duration", "wlan.dmg_oper.min_pp_duration",
20161 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
20162 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20163
20164 {&hf_ieee80211_tag_SP_idle_timeout,
20165 {"SP Idle Timeout", "wlan.dmg_oper.SP_idle_timeout",
20166 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
20167 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20168
20169 {&hf_ieee80211_tag_max_lost_beacons,
20170 {"Max Lost Beacons", "wlan.dmg_oper.max_lost_beacons",
20171 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
20172 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20173
20174 {&hf_ieee80211_tag_type,
20175 {"Type", "wlan.sctor_id.type",
20176 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000000f,
20177 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20178
20179 {&hf_ieee80211_tag_tap1,
20180 {"Tap 1", "wlan.sctor_id.tap1",
20181 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000003f0,
20182 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20183
20184 {&hf_ieee80211_tag_state1,
20185 {"State 1", "wlan.sctor_id.state1",
20186 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000fc00,
20187 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20188
20189 {&hf_ieee80211_tag_tap2,
20190 {"Tap 2", "wlan.sctor_id.tap2",
20191 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00ff0000,
20192 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20193
20194 {&hf_ieee80211_tag_state2,
20195 {"State 2", "wlan.sctor_id.state2",
20196 FT_UINT32, BASE_HEX, NULL((void*)0), 0xff000000,
20197 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20198
20199 {&hf_ieee80211_tag_allocation_id,
20200 {"Allocation ID", "wlan.ext_sched.alloc_id",
20201 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000f,
20202 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20203
20204 {&hf_ieee80211_tag_allocation_type,
20205 {"Allocation Type", "wlan.ext_sched.alloc_type",
20206 FT_UINT16, BASE_DEC, VALS(allocation_type)(const struct _value_string*)(allocation_type), 0x0070,
20207 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20208
20209 {&hf_ieee80211_tag_pseudo_static,
20210 {"Pseudo-static", "wlan.ext_sched.p_static",
20211 FT_BOOLEAN, 16, NULL((void*)0), 0x0080,
20212 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20213
20214 {&hf_ieee80211_tag_truncatable,
20215 {"Truncatable", "wlan.ext_sched.truncatable",
20216 FT_BOOLEAN, 16, NULL((void*)0), 0x0100,
20217 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20218
20219 {&hf_ieee80211_tag_extendable,
20220 {"Extenedable", "wlan.ext_sched.extendable",
20221 FT_BOOLEAN, 16, NULL((void*)0), 0x0200,
20222 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20223
20224 {&hf_ieee80211_tag_pcp_active,
20225 {"PCP Active", "wlan.ext_sched.pcp_active",
20226 FT_BOOLEAN, 16, NULL((void*)0), 0x0400,
20227 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20228
20229 {&hf_ieee80211_tag_lp_sc_used,
20230 {"LP SC Used", "wlan.ext_sched.lp_sc_used",
20231 FT_BOOLEAN, 16, NULL((void*)0), 0x0800,
20232 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20233
20234 {&hf_ieee80211_tag_src_aid,
20235 {"Source AID", "wlan.ext_sched.src_id",
20236 FT_UINT8, BASE_DEC, NULL((void*)0), 0xff,
20237 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20238
20239 {&hf_ieee80211_tag_dest_aid,
20240 {"Destination AID", "wlan.ext_sched.dest_id",
20241 FT_UINT8, BASE_DEC, NULL((void*)0), 0xff,
20242 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20243
20244 {&hf_ieee80211_tag_alloc_start,
20245 {"Allocation Start", "wlan.ext_sched.alloc_start",
20246 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
20247 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20248
20249 {&hf_ieee80211_tag_alloc_block_duration,
20250 {"Allocation Block Duration", "wlan.ext_sched.block_duration",
20251 FT_UINT16, BASE_DEC, NULL((void*)0), 0xffff,
20252 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20253
20254 {&hf_ieee80211_tag_num_blocks,
20255 {"Number of Blocks", "wlan.ext_sched.num_blocks",
20256 FT_UINT8, BASE_DEC, NULL((void*)0), 0xff,
20257 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20258
20259 {&hf_ieee80211_tag_alloc_block_period,
20260 {"Allocation Block Period", "wlan.ext_sched.alloc_block_period",
20261 FT_UINT16, BASE_DEC, NULL((void*)0), 0xffff,
20262 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20263
20264 {&hf_ieee80211_tag_aid,
20265 {"AID", "wlan.sta_avail.aid",
20266 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00ff,
20267 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20268
20269 {&hf_ieee80211_tag_cbap,
20270 {"CBAP", "wlan.sta_avail.cbap",
20271 FT_BOOLEAN, 16, NULL((void*)0), 0x0100,
20272 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20273
20274 {&hf_ieee80211_tag_pp_avail,
20275 {"PP Available", "wlan.sta_avail.pp_avail",
20276 FT_BOOLEAN, 16, NULL((void*)0), 0x0200,
20277 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20278
20279 {&hf_ieee80211_tag_next_ati_start_time,
20280 {"Start Time", "wlan.next_ati.start_time",
20281 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
20282 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20283
20284 {&hf_ieee80211_tag_next_ati_duration,
20285 {"ATI Duration", "wlan.next_ati.duration",
20286 FT_UINT16, BASE_DEC, NULL((void*)0), 0xffff,
20287 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20288
20289 {&hf_ieee80211_tag_old_bssid,
20290 {"Old BSSID", "wlan.pcp_handover.old_bssid",
20291 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
20292 "OLD_BSSID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20293
20294 {&hf_ieee80211_tag_new_pcp_addr,
20295 {"New PCP Address", "wlan.pcp_handover.new_pcp_addr",
20296 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
20297 "New_PCP_Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20298
20299 {&hf_ieee80211_tag_bssid,
20300 {"BSSID", "wlan.quiet_res.bssid",
20301 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
20302 "BSS-ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20303
20304 {&hf_ieee80211_tag_duplex_relay,
20305 {"Duplex", "wlan.relay_capabilities.duplex",
20306 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
20307 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20308
20309 {&hf_ieee80211_tag_cooperation_relay,
20310 {"Cooperation", "wlan.relay_capabilities.cooperation",
20311 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
20312 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20313
20314 {&hf_ieee80211_tag_tx_mode,
20315 {"TX-Mode", "wlan.realy_trans_param.tx_mode",
20316 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
20317 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20318
20319 {&hf_ieee80211_tag_link_change_interval,
20320 {"Link Change Interval", "wlan.realy_trans_param.link_change_interval",
20321 FT_UINT8, BASE_CUSTOM, CF_FUNC(allocation_duration_base_custom)((const void *) (gsize) (allocation_duration_base_custom)), 0xff,
20322 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20323
20324 {&hf_ieee80211_tag_data_sensing_time,
20325 {"Data Sensing Time", "wlan.realy_trans_param.data_sensing_time",
20326 FT_UINT8, BASE_DEC, NULL((void*)0), 0xff,
20327 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20328
20329 {&hf_ieee80211_tag_first_period,
20330 {"First Period", "wlan.realy_trans_param.first_period",
20331 FT_UINT16, BASE_DEC, NULL((void*)0), 0xffff,
20332 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20333
20334 {&hf_ieee80211_tag_second_period,
20335 {"Second Period", "wlan.realy_trans_param.second_period",
20336 FT_UINT16, BASE_DEC, NULL((void*)0), 0xffff,
20337 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20338
20339 {&hf_ieee80211_tag_initiator,
20340 {"Initiator", "wlan.beam_refine.initiator",
20341 FT_BOOLEAN, 16, NULL((void*)0), 0x0001,
20342 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20343
20344 {&hf_ieee80211_tag_tx_train_res,
20345 {"TX-train-response", "wlan.beam_refine.tx_train_res",
20346 FT_BOOLEAN, 16, NULL((void*)0), 0x0002,
20347 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20348
20349 {&hf_ieee80211_tag_rx_train_res,
20350 {"RX-train-response", "wlan.beam_refine.rx_train_res",
20351 FT_BOOLEAN, 16, NULL((void*)0), 0x0004,
20352 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20353
20354 {&hf_ieee80211_tag_tx_trn_ok,
20355 {"TX-TRN-OK", "wlan.beam_refine.tx_trn_ok",
20356 FT_BOOLEAN, 16, NULL((void*)0), 0x0008,
20357 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20358
20359 {&hf_ieee80211_tag_txss_fbck_req,
20360 {"TXSS-FBCK-REQ", "wlan.beam_refine.txss_fbck_req",
20361 FT_BOOLEAN, 16, NULL((void*)0), 0x0010,
20362 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20363
20364 {&hf_ieee80211_tag_bs_fbck,
20365 {"BS-FBCK", "wlan.beam_refine.bs_fbck",
20366 FT_UINT16, BASE_DEC, NULL((void*)0), 0x07e0,
20367 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20368
20369 {&hf_ieee80211_tag_bs_fbck_antenna_id,
20370 {"BS-FBCK Anetenna ID", "wlan.beam_refine.bs_fbck_antenna_id",
20371 FT_UINT16, BASE_DEC, NULL((void*)0), 0x1800,
20372 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20373
20374 {&hf_ieee80211_tag_snr_requested,
20375 {"SNR Requested", "wlan.beam_refine.snr_req",
20376 FT_BOOLEAN, 16, NULL((void*)0), 0x2000,
20377 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20378
20379 {&hf_ieee80211_tag_channel_measurement_requested,
20380 {"Channel Measurement Requested", "wlan.beam_refine.ch_measure_req",
20381 FT_BOOLEAN, 16, NULL((void*)0), 0x4000,
20382 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20383
20384 {&hf_ieee80211_tag_number_of_taps_requested,
20385 {"Number of Taps Requested", "wlan.beam_refine.taps_req",
20386 FT_UINT32, BASE_DEC, VALS(number_of_taps_values)(const struct _value_string*)(number_of_taps_values), 0x00000180,
20387 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20388
20389 {&hf_ieee80211_tag_sector_id_order_req,
20390 {"Sector ID Order Requested", "wlan.beam_refine.sector_id_req",
20391 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200,
20392 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20393
20394 {&hf_ieee80211_tag_snr_present,
20395 {"SNR Present", "wlan.beam_refine.snr_present",
20396 FT_BOOLEAN, 32, NULL((void*)0), 0x00000400,
20397 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20398
20399 {&hf_ieee80211_tag_channel_measurement_present,
20400 {"Channel Measurement Present", "wlan.beam_refine.ch_measure_present",
20401 FT_BOOLEAN, 32, NULL((void*)0), 0x00000800,
20402 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20403
20404 {&hf_ieee80211_tag_tap_delay_present,
20405 {"Tap Delay Present", "wlan.beam_refine.tap_delay_present",
20406 FT_BOOLEAN, 32, NULL((void*)0), 0x00001000,
20407 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20408
20409 {&hf_ieee80211_tag_number_of_taps_present,
20410 {"Number of Taps Present", "wlan.beam_refine.taps_present",
20411 FT_UINT32, BASE_DEC, VALS(number_of_taps_values)(const struct _value_string*)(number_of_taps_values), 0x00006000,
20412 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20413
20414 {&hf_ieee80211_tag_number_of_measurement,
20415 {"Number of Measurements", "wlan.beam_refine.num_measurement",
20416 FT_UINT32, BASE_DEC, NULL((void*)0), 0x003f8000,
20417 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20418
20419 {&hf_ieee80211_tag_sector_id_order_present,
20420 {"Sector ID Order Present", "wlan.beam_refine.sector_id_present",
20421 FT_BOOLEAN, 32, NULL((void*)0), 0x00400000,
20422 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20423
20424 {&hf_ieee80211_tag_number_of_beams,
20425 {"Number of Beams", "wlan.beam_refine.num_beams",
20426 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0f800000,
20427 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20428
20429 {&hf_ieee80211_tag_mid_extension,
20430 {"MID Extension", "wlan.beam_refine.mid_ext",
20431 FT_BOOLEAN, 32, NULL((void*)0), 0x10000000,
20432 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20433
20434 {&hf_ieee80211_tag_capability_request,
20435 {"Capability Request", "wlan.beam_refine.cap_req",
20436 FT_BOOLEAN, 32, NULL((void*)0), 0x20000000,
20437 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20438
20439 {&hf_ieee80211_tag_nextpcp_list,
20440 {"AID of NextPCP", "wlan.next_pcp.list",
20441 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
20442 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20443
20444 {&hf_ieee80211_tag_nextpcp_token,
20445 {"NextPCP List Token", "wlan.next_pcp.token",
20446 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
20447 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20448
20449 {&hf_ieee80211_tag_reamaining_BI,
20450 {"Remaining BI's", "wlan.pcp_handover.remaining_BIs",
20451 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
20452 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20453
20454 {&hf_ieee80211_tag_request_token,
20455 {"Request Token", "wlan.request_token",
20456 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
20457 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20458
20459 {&hf_ieee80211_tag_bi_start_time,
20460 {"BI Start Time", "wlan.bi_start_time",
20461 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
20462 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20463
20464 {&hf_ieee80211_tag_sleep_cycle,
20465 {"Sleep Cycle", "wlan.sleep_cycle",
20466 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
20467 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20468
20469 {&hf_ieee80211_tag_num_awake_bis,
20470 {"Number of Awake/Doze BIs", "wlan.num_awake_bis",
20471 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
20472 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20473
20474 {&hf_ieee80211_ff_dmg_action_code,
20475 {"DMG Action", "wlan_mgt.fixed.dmg_act",
20476 FT_UINT8, BASE_HEX, VALS(ff_dmg_action_flags)(const struct _value_string*)(ff_dmg_action_flags), 0,
20477 "Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20478
20479 {&hf_ieee80211_ff_unprotected_dmg_action_code,
20480 {"Unprotected DMG Action", "wlan_mgt.fixed.unprotected_dmg_act",
20481 FT_UINT8, BASE_HEX, VALS(ff_unprotected_dmg_action_flags)(const struct _value_string*)(ff_unprotected_dmg_action_flags
)
, 0,
20482 "Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20483
20484 {&hf_ieee80211_ff_dmg_pwr_mgmt,
20485 {"DMG Power Management", "wlan.dmg.pwr_mgmt",
20486 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
20487 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20488
20489 {&hf_ieee80211_ff_subject_address,
20490 {"Subject Address", "wlan.dmg.subject_addr",
20491 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
20492 "MAC address of requested STA", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20493
20494 {&hf_ieee80211_ff_handover_reason,
20495 {"Handover Reason", "wlan.dmg.handover_reason",
20496 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
20497 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20498
20499 {&hf_ieee80211_ff_handover_remaining_bi,
20500 {"Handover Remaining BI", "wlan.dmg.handover_remaining_bi",
20501 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
20502 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20503
20504 {&hf_ieee80211_ff_handover_result,
20505 {"Handover Result", "wlan.dmg.handover_result",
20506 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
20507 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20508
20509 {&hf_ieee80211_ff_handover_reject_reason,
20510 {"Handover Reject Reason", "wlan.dmg.handover_reject_reason",
20511 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
20512 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20513
20514 {&hf_ieee80211_ff_destination_reds_aid,
20515 {"Destination REDS AID", "wlan.dmg.destination_reds_aid",
20516 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
20517 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20518
20519 {&hf_ieee80211_ff_destination_aid,
20520 {"Destination AID", "wlan.dmg.destination_aid",
20521 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
20522 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20523
20524 {&hf_ieee80211_ff_realy_aid,
20525 {"Relay AID", "wlan.dmg.realy_aid",
20526 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
20527 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20528
20529 {&hf_ieee80211_ff_source_aid,
20530 {"Source AID", "wlan.dmg.source_aid",
20531 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
20532 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20533
20534 {&hf_ieee80211_ff_timing_offset,
20535 {"Timing Offset", "wlan.dmg.timing_offset",
20536 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
20537 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20538
20539 {&hf_ieee80211_ff_sampling_frequency_offset,
20540 {"Sampling Frequency Offset", "wlan.dmg.sampling_frequency_offset",
20541 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
20542 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20543
20544 {&hf_ieee80211_ff_relay_operation_type,
20545 {"Relay Operation Type", "wlan.dmg.relay_operation_type",
20546 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
20547 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20548
20549 {&hf_ieee80211_ff_peer_sta_aid,
20550 {"Peer STA AID", "wlan.dmg.peer_sta_aid",
20551 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
20552 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20553
20554 {&hf_ieee80211_ff_snr,
20555 {"SNR", "wlan.dmg.snr",
20556 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
20557 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20558
20559 {&hf_ieee80211_ff_internal_angle,
20560 {"Internal Angle", "wlan.dmg.internal_angle",
20561 FT_UINT8, BASE_DEC, NULL((void*)0), 0xfe,
20562 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20563
20564 {&hf_ieee80211_ff_recommend,
20565 {"Recommend", "wlan.dmg.recommend",
20566 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
20567 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20568
20569 {&hf_ieee80211_ff_fst_action_code,
20570 {"FST Action Code", "wlan.fst.action_code",
20571 FT_UINT8, BASE_HEX, VALS(ff_fst_action_flags)(const struct _value_string*)(ff_fst_action_flags), 0,
20572 "Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20573
20574 {&hf_ieee80211_ff_llt,
20575 {"Link Loss Timeout", "wlan.fst.llt",
20576 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
20577 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20578
20579 {&hf_ieee80211_ff_fsts_id,
20580 {"FSTS ID", "wlan.session_trans.fsts_id",
20581 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
20582 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20583
20584 {&hf_ieee80211_ff_mmpdu_len,
20585 {"MMPDU Length", "wlan.fst.mmpdu_length",
20586 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
20587 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20588
20589 {&hf_ieee80211_ff_mmpdu_ctrl,
20590 {"MMPDU Control", "wlan.fst.mmpdu_ctrl",
20591 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
20592 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20593
20594 {&hf_ieee80211_ff_oct_mmpdu,
20595 {"OCT MMPDU", "wlan.fst.oct_mmpdu",
20596 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
20597 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20598
20599 {&hf_ieee80211_ff_vht_mimo_cntrl,
20600 {"VHT MIMO Control", "wlan.vht.mimo_control.control",
20601 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0,
20602 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20603
20604 {&hf_ieee80211_ff_vht_mimo_cntrl_nc_index,
20605 {"Nc Index", "wlan.vht.mimo_control.ncindex",
20606 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_nc_index_vals)(const struct _value_string*)(ff_vht_mimo_cntrl_nc_index_vals
)
, 0x000007,
20607 "Number of Columns Less One", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20608
20609 {&hf_ieee80211_ff_vht_mimo_cntrl_nr_index,
20610 {"Nr Index", "wlan.vht.mimo_control.nrindex",
20611 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_nr_index_vals)(const struct _value_string*)(ff_vht_mimo_cntrl_nr_index_vals
)
, 0x000038,
20612 "Number of Rows Less One", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20613
20614 {&hf_ieee80211_ff_vht_mimo_cntrl_channel_width,
20615 {"Channel Width", "wlan.vht.mimo_control.chanwidth",
20616 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_channel_width_vals)(const struct _value_string*)(ff_vht_mimo_cntrl_channel_width_vals
)
, 0x0000C0,
20617 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20618
20619 {&hf_ieee80211_ff_vht_mimo_cntrl_grouping,
20620 {"Grouping (Ng)", "wlan.vht.mimo_control.grouping",
20621 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_grouping_vals)(const struct _value_string*)(ff_vht_mimo_cntrl_grouping_vals
)
, 0x000300,
20622 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20623
20624 {&hf_ieee80211_ff_vht_mimo_cntrl_codebook_info,
20625 {"Codebook Information", "wlan.vht.mimo_control.codebookinfo",
20626 FT_UINT24, BASE_HEX, NULL((void*)0), 0x000400,
20627 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20628
20629 {&hf_ieee80211_ff_vht_mimo_cntrl_feedback_type,
20630 {"Feedback Type", "wlan.vht.mimo_control.feedbacktype",
20631 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_feedback_vals)(const struct _value_string*)(ff_vht_mimo_cntrl_feedback_vals
)
, 0x000800,
20632 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20633
20634 {&hf_ieee80211_ff_vht_mimo_cntrl_remaining_feedback_seg,
20635 {"Remaining Feedback Segments", "wlan.vht.mimo_control.remainingfeedbackseg",
20636 FT_UINT24, BASE_HEX, NULL((void*)0), 0x007000,
20637 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20638
20639 {&hf_ieee80211_ff_vht_mimo_cntrl_first_feedback_seg,
20640 {"First Feedback Segments", "wlan.vht.mimo_control.firstfeedbackseg",
20641 FT_UINT24, BASE_HEX, NULL((void*)0), 0x008000,
20642 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20643
20644 {&hf_ieee80211_ff_vht_mimo_cntrl_reserved,
20645 {"Reserved", "wlan.vht.mimo_control.reserved",
20646 FT_UINT24, BASE_HEX, NULL((void*)0), 0x030000,
20647 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20648
20649 {&hf_ieee80211_ff_vht_mimo_cntrl_sounding_dialog_token_number,
20650 {"Sounding Dialog Toker Number", "wlan.vht.mimo_control.soundingdialogtocketnbr",
20651 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFC0000,
20652 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20653
20654 {&hf_ieee80211_ff_vht_action,
20655 {"VHT Action", "wlan.vht.action",
20656 FT_UINT8, BASE_DEC, VALS(vht_action_vals)(const struct _value_string*)(vht_action_vals), 0,
20657 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20658
20659 {&hf_ieee80211_vht_compressed_beamforming_report,
20660 {"VHT Compressed Beamforming Report", "wlan.vht.compressed_beamforming_report",
20661 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
20662 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20663
20664 {&hf_ieee80211_vht_compressed_beamforming_report_snr,
20665 {"Signal to Noise Ratio (SNR)", "wlan.vht.compressed_beamforming_report.snr",
20666 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
20667 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20668
20669 {&hf_ieee80211_vht_compressed_beamforming_feedback_matrix,
20670 {"Compressed Beamforming Feedback Matrix", "wlan.vht.compressed_beamforming_report.feedback_matrix",
20671 FT_NONE, BASE_NONE, NULL((void*)0), 0,
20672 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20673
20674 {&hf_ieee80211_vht_group_id_management,
20675 {"Group ID Management", "wlan.vht.group_id_management",
20676 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
20677 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20678
20679 {&hf_ieee80211_vht_membership_status_array,
20680 {"Membership Status Array", "wlan.vht.membership_status_array",
20681 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
20682 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20683
20684 {&hf_ieee80211_vht_user_position_array,
20685 {"User Position Array", "wlan.vht.user_position_array",
20686 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
20687 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20688
20689 {&hf_ieee80211_vht_operation_mode_notification,
20690 {"Operation Mode Notification", "wlan.vht.operation_mode_notification",
20691 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
20692 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20693
20694 {&hf_ieee80211_tag_tspec_allocation_id,
20695 {"Allocation ID", "wlan.dmg_tspec.allocation_id",
20696 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00000f,
20697 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20698
20699 {&hf_ieee80211_tag_tspec_allocation_type,
20700 {"Allocation Type", "wlan.dmg_tspec.allocation_type",
20701 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000070,
20702 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20703
20704 {&hf_ieee80211_tag_tspec_allocation_format,
20705 {"Allocation Format", "wlan.dmg_tspec.allocation_format",
20706 FT_BOOLEAN, 24, NULL((void*)0), 0x000080,
20707 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20708
20709 {&hf_ieee80211_tag_tspec_pseudo_static,
20710 {"Pseudo Static", "wlan.dmg_tspec.pseudo_static",
20711 FT_BOOLEAN, 24, NULL((void*)0), 0x000100,
20712 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20713
20714 {&hf_ieee80211_tag_tspec_truncatable,
20715 {"Truncatable", "wlan.dmg_tspec.truncatable",
20716 FT_BOOLEAN, 24, NULL((void*)0), 0x000200,
20717 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20718
20719 {&hf_ieee80211_tag_tspec_extendable,
20720 {"Extendable", "wlan.dmg_tspec.extendable",
20721 FT_BOOLEAN, 24, NULL((void*)0), 0x000400,
20722 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20723
20724 {&hf_ieee80211_tag_tspec_lp_sc_used,
20725 {"LP SC Usec", "wlan.dmg_tspec.lp_sc_used",
20726 FT_BOOLEAN, 24, NULL((void*)0), 0x000800,
20727 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20728
20729 {&hf_ieee80211_tag_tspec_up,
20730 {"UP", "wlan.dmg_tspec.up",
20731 FT_UINT24, BASE_HEX, NULL((void*)0), 0x007000,
20732 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20733
20734 {&hf_ieee80211_tag_tspec_dest_aid,
20735 {"Destination AID", "wlan.dmg_tspec.dest_aid",
20736 FT_UINT24, BASE_HEX, NULL((void*)0), 0x7f8000,
20737 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20738
20739 {&hf_ieee80211_tag_tspec_allocation_period,
20740 {"Allocation Period", "wlan.dmg_tspec.allocation_period",
20741 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
20742 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20743
20744 {&hf_ieee80211_tag_tspec_min_allocation,
20745 {"Minimal Allocation", "wlan.dmg_tspec.min_allocation",
20746 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
20747 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20748
20749 {&hf_ieee80211_tag_tspec_max_allocation,
20750 {"Maximal Allocation", "wlan.dmg_tspec.max_allocation",
20751 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
20752 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20753
20754 {&hf_ieee80211_tag_tspec_min_duration,
20755 {"Minimal Duration", "wlan.dmg_tspec.min_duration",
20756 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
20757 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20758
20759 {&hf_ieee80211_tag_tspec_num_of_constraints,
20760 {"Number Of Constraints", "wlan.dmg_tspec.num_of_constraints",
20761 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
20762 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20763
20764 {&hf_ieee80211_tag_tspec_tsconst_start_time,
20765 {"TS Constraint Start Time", "wlan.dmg_tspec.tsconst.start_time",
20766 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
20767 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20768
20769 {&hf_ieee80211_tag_tspec_tsconst_duration,
20770 {"TS Constraint Duration", "wlan.dmg_tspec.tsconst.duration",
20771 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
20772 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20773
20774 {&hf_ieee80211_tag_tspec_tsconst_period,
20775 {"TS Constraint Period", "wlan.dmg_tspec.tsconst.period",
20776 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
20777 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20778
20779 {&hf_ieee80211_tag_tspec_tsconst_interferer_mac,
20780 {"TS Constraint Interferer MAC Address", "wlan.dmg_tspec.tsconst.interferer_mac",
20781 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
20782 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20783
20784 {&hf_ieee80211_tag_channel_measurement_feedback_realtive_I,
20785 {"Channel Measurement Feedback Relative I", "wlan.ch_meas_fb.realtive_I",
20786 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
20787 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20788
20789 {&hf_ieee80211_tag_channel_measurement_feedback_realtive_Q,
20790 {"Channel Measurement Feedback Relative Q", "wlan.ch_meas_fb.realtive_Q",
20791 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
20792 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20793
20794 {&hf_ieee80211_tag_channel_measurement_feedback_tap_delay,
20795 {"Channel Measurement Feedback Tap Delay", "wlan.ch_meas_fb.tap_delay",
20796 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
20797 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20798
20799 {&hf_ieee80211_tag_channel_measurement_feedback_sector_id,
20800 {"Channel Measurement Feedback Secotr ID", "wlan.ch_meas_fb.sector_id",
20801 FT_UINT8, BASE_DEC, NULL((void*)0), 0xfc,
20802 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20803
20804 {&hf_ieee80211_tag_channel_measurement_feedback_antenna_id,
20805 {"Channel Measurement Feedback Antenna ID", "wlan.ch_meas_fb.antenna_id",
20806 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
20807 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20808
20809 {&hf_ieee80211_tag_awake_window,
20810 {"Awake Window", "wlan.awake_window",
20811 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
20812 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20813
20814 {&hf_ieee80211_tag_addba_ext_no_frag,
20815 {"ADDBA No Fragmentation", "wlan.addba.no_frag",
20816 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
20817 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20818
20819 {&hf_ieee80211_tag_multi_band_ctrl_sta_role,
20820 {"STA Rold", "wlan.multi_band.ctrl_sta_role",
20821 FT_UINT8, BASE_DEC, NULL((void*)0), 0xe0,
20822 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20823
20824 {&hf_ieee80211_tag_multi_band_ctrl_addr_present,
20825 {"STA MAC Address Present", "wlan.multi_band.ctrl_addr_present",
20826 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
20827 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20828
20829 {&hf_ieee80211_tag_multi_band_ctrl_cipher_present,
20830 {"PCS Present", "wlan.multi_band.ctrl_cipher_present",
20831 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
20832 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20833
20834 {&hf_ieee80211_tag_multi_band_oper_class,
20835 {"Operating Class", "wlan.multi_band.oper_class",
20836 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
20837 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20838
20839 {&hf_ieee80211_tag_multi_band_channel_number,
20840 {"Channel Number", "wlan.multi_band.channel_number",
20841 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
20842 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20843
20844 {&hf_ieee80211_tag_multi_band_tsf_offset,
20845 {"TSF Offset", "wlan.multi_band.tsf_offset",
20846 FT_UINT64, BASE_DEC, NULL((void*)0), 0,
20847 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20848
20849 {&hf_ieee80211_tag_multi_band_conn_ap,
20850 {"Connection Capability AP", "wlan.multi_band.conn_ap",
20851 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
20852 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20853
20854 {&hf_ieee80211_tag_multi_band_conn_pcp,
20855 {"Connection Capability PCP", "wlan.multi_band.conn_pcp",
20856 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
20857 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20858
20859 {&hf_ieee80211_tag_multi_band_conn_dls,
20860 {"Connection Capability DLS", "wlan.multi_band.conn_dls",
20861 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
20862 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20863
20864 {&hf_ieee80211_tag_multi_band_conn_tdls,
20865 {"Connection Capability TDLS", "wlan.multi_band.conn_tdls",
20866 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
20867 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20868
20869 {&hf_ieee80211_tag_multi_band_conn_ibss,
20870 {"Connection Capability IBSS", "wlan.multi_band.conn_ibss",
20871 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
20872 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20873
20874 {&hf_ieee80211_tag_multi_band_fst_timeout,
20875 {"FST Session Timeout", "wlan.multi_band.fst_timeout",
20876 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
20877 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20878
20879 {&hf_ieee80211_tag_multi_band_sta_mac,
20880 {"Transmitting STA MAC Address", "wlan.multi_band.sta_mac",
20881 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
20882 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20883
20884 {&hf_ieee80211_tag_activity,
20885 {"Activity", "wlan.activity",
20886 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
20887 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20888
20889 {&hf_ieee80211_tag_dmg_link_adapt_mcs,
20890 {"MCS", "wlan.dmg_link_adapt.mcs",
20891 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
20892 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20893
20894 {&hf_ieee80211_tag_dmg_link_adapt_link_margin,
20895 {"Link Margin", "wlan.dmg_link_adapt.link_margin",
20896 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
20897 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20898
20899 {&hf_ieee80211_tag_ref_timestamp,
20900 {"Reference Timestamp", "wlan.ref_timestamp",
20901 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
20902 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20903
20904 {&hf_ieee80211_tag_switching_stream_non_qos,
20905 {"Non-Qos Data Frames", "wlan.switching_stream.non_qos",
20906 FT_BOOLEAN, 8, NULL((void*)0), 0,
20907 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20908
20909 {&hf_ieee80211_tag_switching_stream_param_num,
20910 {"Number Of Switching Stream Elements", "wlan.switching_stream.param_num",
20911 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
20912 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20913
20914 {&hf_ieee80211_tag_switching_stream_old_tid,
20915 {"Old Band TID", "wlan.switching_stream.old_tid",
20916 FT_UINT16, BASE_DEC, NULL((void*)0), 0xf000,
20917 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20918
20919 {&hf_ieee80211_tag_switching_stream_old_direction,
20920 {"Old Band Direction", "wlan.switching_stream.old_direction",
20921 FT_BOOLEAN, 16, NULL((void*)0), 0x0800,
20922 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20923
20924 {&hf_ieee80211_tag_switching_stream_new_tid,
20925 {"New Band TID", "wlan.switching_stream.new_tid",
20926 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0780,
20927 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20928
20929 {&hf_ieee80211_tag_switching_stream_new_direction,
20930 {"New Band Direction", "wlan.switching_stream.new_direction",
20931 FT_BOOLEAN, 16, NULL((void*)0), 0x0040,
20932 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20933
20934 {&hf_ieee80211_tag_switching_stream_new_valid_id,
20935 {"Stream ID in New Band Valid", "wlan.switching_stream.new_valid_id",
20936 FT_BOOLEAN, 16, NULL((void*)0), 0x0020,
20937 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20938
20939 {&hf_ieee80211_tag_switching_stream_llt_type,
20940 {"LLT Type", "wlan.switching_stream.llt_type",
20941 FT_BOOLEAN, 16, NULL((void*)0), 0x0010,
20942 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20943 };
20944
20945 static hf_register_info ff[] = {
20946
20947 {&hf_ieee80211_ff_timestamp,
20948 {"Timestamp", "wlan_mgt.fixed.timestamp",
20949 FT_UINT64, BASE_HEX, NULL((void*)0), 0,
20950 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20951
20952 {&hf_ieee80211_ff_auth_alg,
20953 {"Authentication Algorithm", "wlan_mgt.fixed.auth.alg",
20954 FT_UINT16, BASE_DEC, VALS(auth_alg)(const struct _value_string*)(auth_alg), 0,
20955 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20956
20957 {&hf_ieee80211_ff_beacon_interval,
20958 {"Beacon Interval", "wlan_mgt.fixed.beacon",
20959 FT_UINT32, BASE_CUSTOM, CF_FUNC(beacon_interval_base_custom)((const void *) (gsize) (beacon_interval_base_custom)), 0,
20960 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20961
20962 {&hf_ieee80211_fixed_parameters,
20963 {"Fixed parameters", "wlan_mgt.fixed.all",
20964 FT_NONE, BASE_NONE, NULL((void*)0), 0,
20965 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20966
20967 {&hf_ieee80211_tagged_parameters,
20968 {"Tagged parameters", "wlan_mgt.tagged.all",
20969 FT_NONE, BASE_NONE, NULL((void*)0), 0,
20970 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20971
20972 {&hf_ieee80211_tag_ssid,
20973 {"SSID", "wlan_mgt.ssid",
20974 FT_STRING, BASE_NONE, NULL((void*)0), 0,
20975 "Indicates the identity of an ESS or IBSS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20976
20977 {&hf_ieee80211_tag_supp_rates,
20978 {"Supported Rates", "wlan_mgt.supported_rates",
20979 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x200, &ieee80211_supported_rates_vals_ext, 0x0,
20980 "In Mbit/sec, (B) for Basic Rates", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20981
20982 {&hf_ieee80211_tag_fh_dwell_time,
20983 {"Dwell Time", "wlan_mgt.fh.dwell_time",
20984 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
20985 "In Time Unit (TU)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20986
20987 {&hf_ieee80211_tag_fh_hop_set,
20988 {"Hop Set", "wlan_mgt.fh.hop_set",
20989 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
20990 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20991
20992 {&hf_ieee80211_tag_fh_hop_pattern,
20993 {"Hop Pattern", "wlan_mgt.fh.hop_pattern",
20994 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
20995 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
20996
20997 {&hf_ieee80211_tag_fh_hop_index,
20998 {"Hop Index", "wlan_mgt.fh.hop_index",
20999 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
21000 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21001
21002 {&hf_ieee80211_ff_block_ack_params,
21003 {"Block Ack Parameters", "wlan_mgt.fixed.baparams",
21004 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
21005 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21006
21007 {&hf_ieee80211_ff_block_ack_params_amsdu_permitted,
21008 {"A-MSDUs", "wlan_mgt.fixed.baparams.amsdu",
21009 FT_BOOLEAN, 16, TFS(&ff_block_ack_params_amsdu_permitted_flag)(const struct true_false_string*)(&ff_block_ack_params_amsdu_permitted_flag
)
, 0x0001,
21010 "A-MSDU Permitted in QoS Data MPDUs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21011
21012 {&hf_ieee80211_ff_block_ack_params_policy,
21013 {"Block Ack Policy", "wlan_mgt.fixed.baparams.policy",
21014 FT_BOOLEAN, 16, TFS(&ff_block_ack_params_policy_flag)(const struct true_false_string*)(&ff_block_ack_params_policy_flag
)
, 0x0002,
21015 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21016
21017 {&hf_ieee80211_ff_block_ack_params_tid,
21018 {"Traffic Identifier", "wlan_mgt.fixed.baparams.tid",
21019 FT_UINT16, BASE_HEX, NULL((void*)0), 0x003C,
21020 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21021
21022 {&hf_ieee80211_ff_block_ack_params_buffer_size,
21023 {"Number of Buffers (1 Buffer = 2304 Bytes)", "wlan_mgt.fixed.baparams.buffersize",
21024 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFFC0,
21025 "Number of Buffers", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21026
21027 {&hf_ieee80211_ff_block_ack_timeout,
21028 {"Block Ack Timeout", "wlan_mgt.fixed.batimeout",
21029 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
21030 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21031
21032 {&hf_ieee80211_ff_block_ack_ssc,
21033 {"Block Ack Starting Sequence Control (SSC)", "wlan_mgt.fixed.ssc",
21034 FT_UINT16, BASE_HEX, 0, 0,
21035 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21036
21037 {&hf_ieee80211_ff_block_ack_ssc_fragment,
21038 {"Fragment", "wlan_mgt.fixed.ssc.fragment",
21039 FT_UINT16, BASE_DEC, 0, 0x000f,
21040 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21041
21042 {&hf_ieee80211_ff_block_ack_ssc_sequence,
21043 {"Starting Sequence Number", "wlan_mgt.fixed.ssc.sequence",
21044 FT_UINT16, BASE_DEC, 0, 0xfff0,
21045 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21046
21047 {&hf_ieee80211_ff_delba_param,
21048 {"Delete Block Ack (DELBA) Parameter Set", "wlan_mgt.fixed.delba.param",
21049 FT_UINT16, BASE_HEX, 0, 0,
21050 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21051
21052 {&hf_ieee80211_ff_delba_param_reserved,
21053 {"Reserved", "wlan_mgt.fixed.delba.param.reserved",
21054 FT_UINT16, BASE_HEX, 0, 0x07ff,
21055 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21056
21057 {&hf_ieee80211_ff_delba_param_init,
21058 {"Initiator", "wlan_mgt.fixed.delba.param.initiator",
21059 FT_BOOLEAN, 16, 0, 0x0800,
21060 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21061
21062 {&hf_ieee80211_ff_delba_param_tid,
21063 {"TID", "wlan_mgt.fixed.delba.param.tid",
21064 FT_UINT16, BASE_HEX, 0, 0xf000,
21065 "Traffic Identifier (TID)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21066
21067 {&hf_ieee80211_ff_max_reg_pwr,
21068 {"Maximum Regulation Power", "wlan_mgt.fixed.maxregpwr",
21069 FT_UINT16, BASE_HEX, 0, 0,
21070 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21071
21072 {&hf_ieee80211_ff_measurement_pilot_int,
21073 {"Measurement Pilot Interval", "wlan_mgt.fixed.msmtpilotint",
21074 FT_UINT16, BASE_HEX, 0, 0,
21075 "Measurement Pilot Interval Fixed Field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21076
21077 {&hf_ieee80211_ff_country_str,
21078 {"Country String", "wlan_mgt.fixed.country",
21079 FT_STRING, BASE_NONE, 0, 0,
21080 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21081
21082 {&hf_ieee80211_ff_max_tx_pwr,
21083 {"Maximum Transmit Power", "wlan_mgt.fixed.maxtxpwr",
21084 FT_UINT8, BASE_HEX, 0, 0,
21085 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21086
21087 {&hf_ieee80211_ff_tx_pwr_used,
21088 {"Transmit Power Used", "wlan_mgt.fixed.txpwr",
21089 FT_UINT8, BASE_HEX, 0, 0,
21090 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21091
21092 {&hf_ieee80211_ff_transceiver_noise_floor,
21093 {"Transceiver Noise Floor", "wlan_mgt.fixed.tnoisefloor",
21094 FT_UINT8, BASE_HEX, 0, 0,
21095 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21096
21097 {&hf_ieee80211_ff_channel_width,
21098 {"Supported Channel Width", "wlan_mgt.fixed.chanwidth",
21099 FT_UINT8, BASE_HEX, VALS(ff_channel_width_vals)(const struct _value_string*)(ff_channel_width_vals), 0,
21100 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21101
21102 {&hf_ieee80211_ff_qos_info_ap,
21103 {"QoS Information (AP)", "wlan_mgt.fixed.qosinfo.ap",
21104 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
21105 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21106
21107 {&hf_ieee80211_ff_qos_info_ap_edca_param_set_counter,
21108 {"EDCA Parameter Set Update Count", "wlan_mgt.fixed.qosinfo.ap.edcaupdate",
21109 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0F,
21110 "Enhanced Distributed Channel Access (EDCA) Parameter Set Update Count", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21111
21112 {&hf_ieee80211_ff_qos_info_ap_q_ack,
21113 {"Q-Ack", "wlan_mgt.fixed.qosinfo.ap.qack",
21114 FT_BOOLEAN, 8, TFS(&ff_qos_info_ap_q_ack_flag)(const struct true_false_string*)(&ff_qos_info_ap_q_ack_flag
)
, 0x10,
21115 "QoS Ack", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21116
21117 {&hf_ieee80211_ff_qos_info_ap_queue_req,
21118 {"Queue Request", "wlan_mgt.fixed.qosinfo.ap.queue_req",
21119 FT_BOOLEAN, 8, TFS(&ff_qos_info_ap_queue_req_flag)(const struct true_false_string*)(&ff_qos_info_ap_queue_req_flag
)
, 0x20,
21120 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21121
21122 {&hf_ieee80211_ff_qos_info_ap_txop_request,
21123 {"TXOP Request", "wlan_mgt.fixed.qosinfo.ap.txopreq",
21124 FT_BOOLEAN, 8, TFS(&ff_qos_info_ap_txop_request_flag)(const struct true_false_string*)(&ff_qos_info_ap_txop_request_flag
)
, 0x40,
21125 "Transmit Opportunity (TXOP) Request", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21126
21127 {&hf_ieee80211_ff_qos_info_ap_reserved,
21128 {"Reserved", "wlan_mgt.fixed.qosinfo.ap.reserved",
21129 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
21130 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21131
21132 {&hf_ieee80211_ff_qos_info_sta,
21133 {"QoS Information (STA)", "wlan_mgt.fixed.qosinfo.sta",
21134 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
21135 "TCLAS Processing", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21136
21137 {&hf_ieee80211_ff_qos_info_sta_ac_vo,
21138 {"AC_VO U-APSD Flag", "wlan_mgt.fixed.qosinfo.sta.ac_vo",
21139 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag)(const struct true_false_string*)(&ff_qos_info_sta_ac_flag
)
, 0x01,
21140 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21141
21142 {&hf_ieee80211_ff_qos_info_sta_ac_vi,
21143 {"AC_VI U-APSD Flag", "wlan_mgt.fixed.qosinfo.sta.ac_vi",
21144 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag)(const struct true_false_string*)(&ff_qos_info_sta_ac_flag
)
, 0x02,
21145 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21146
21147 {&hf_ieee80211_ff_qos_info_sta_ac_bk,
21148 {"AC_BK U-APSD Flag", "wlan_mgt.fixed.qosinfo.sta.ac_bk",
21149 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag)(const struct true_false_string*)(&ff_qos_info_sta_ac_flag
)
, 0x04,
21150 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21151
21152 {&hf_ieee80211_ff_qos_info_sta_ac_be,
21153 {"AC_BE U-APSD Flag", "wlan_mgt.fixed.qosinfo.sta.ac_be",
21154 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag)(const struct true_false_string*)(&ff_qos_info_sta_ac_flag
)
, 0x08,
21155 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21156
21157 {&hf_ieee80211_ff_qos_info_sta_q_ack,
21158 {"Q-Ack", "wlan_mgt.fixed.qosinfo.sta.qack",
21159 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_q_ack_flag)(const struct true_false_string*)(&ff_qos_info_sta_q_ack_flag
)
, 0x10,
21160 "QoS Ack", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21161
21162 {&hf_ieee80211_ff_qos_info_sta_max_sp_length,
21163 {"Max SP Length", "wlan_mgt.fixed.qosinfo.sta.max_sp_length",
21164 FT_UINT8, BASE_HEX, VALS(ff_qos_info_sta_max_sp_len_flags)(const struct _value_string*)(ff_qos_info_sta_max_sp_len_flags
)
, 0x60,
21165 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21166
21167 {&hf_ieee80211_ff_qos_info_sta_more_data_ack,
21168 {"More Data Ack", "wlan_mgt.fixed.qosinfo.sta.more_data_ack",
21169 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_more_data_ack_flag)(const struct true_false_string*)(&ff_qos_info_sta_more_data_ack_flag
)
, 0x80,
21170 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21171
21172 {&hf_ieee80211_ff_sm_pwr_save,
21173 {"Spatial Multiplexing (SM) Power Control", "wlan_mgt.fixed.sm.powercontrol",
21174 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
21175 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21176
21177 {&hf_ieee80211_ff_sm_pwr_save_enabled,
21178 {"SM Power Save", "wlan_mgt.fixed.sm.powercontrol.enabled",
21179 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x01,
21180 "Spatial Multiplexing (SM) Power Save", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21181
21182 {&hf_ieee80211_ff_sm_pwr_save_sm_mode,
21183 {"SM Mode", "wlan_mgt.fixed.sm.powercontrol.mode",
21184 FT_BOOLEAN, 8, TFS(&ff_sm_pwr_save_sm_mode_flag)(const struct true_false_string*)(&ff_sm_pwr_save_sm_mode_flag
)
, 0x02,
21185 "Spatial Multiplexing (SM) Mode", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21186
21187 {&hf_ieee80211_ff_sm_pwr_save_reserved,
21188 {"Reserved", "wlan_mgt.fixed.sm.powercontrol.reserved",
21189 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC,
21190 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21191
21192 {&hf_ieee80211_ff_pco_phase_cntrl,
21193 {"Phased Coexistence Operation (PCO) Phase Control", "wlan_mgt.fixed.pco.phasecntrl",
21194 FT_BOOLEAN, BASE_NONE, TFS(&ff_pco_phase_cntrl_flag)(const struct true_false_string*)(&ff_pco_phase_cntrl_flag
)
, 0x0,
21195 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21196
21197 {&hf_ieee80211_ff_psmp_param_set,
21198 {"Power Save Multi-Poll (PSMP) Parameter Set", "wlan_mgt.fixed.psmp.paramset",
21199 FT_UINT16, BASE_HEX, 0, 0,
21200 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21201
21202 {&hf_ieee80211_ff_psmp_param_set_n_sta,
21203 {"Number of STA Info Fields Present", "wlan_mgt.fixed.psmp.paramset.nsta",
21204 FT_UINT16, BASE_HEX, 0, 0x000F,
21205 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21206
21207 {&hf_ieee80211_ff_psmp_param_set_more_psmp,
21208 {"More PSMP", "wlan_mgt.fixed.psmp.paramset.more",
21209 FT_BOOLEAN, 16, TFS(&ff_psmp_param_set_more_psmp_flag)(const struct true_false_string*)(&ff_psmp_param_set_more_psmp_flag
)
, 0x0010,
21210 "More Power Save Multi-Poll (PSMP)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21211
21212 {&hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration,
21213 {"PSMP Sequence Duration [us]", "wlan_mgt.fixed.psmp.paramset.seqduration",
21214 FT_UINT16, BASE_DEC, 0, 0xFFE0,
21215 "Power Save Multi-Poll (PSMP) Sequence Duration", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21216
21217 {&hf_ieee80211_ff_mimo_cntrl,
21218 {"MIMO Control", "wlan_mgt.fixed.mimo.control",
21219 FT_BYTES, BASE_NONE, 0, 0x0,
21220 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21221
21222 {&hf_ieee80211_ff_mimo_cntrl_nc_index,
21223 {"Nc Index", "wlan_mgt.fixed.mimo.control.ncindex",
21224 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_nc_index_flags)(const struct _value_string*)(ff_mimo_cntrl_nc_index_flags), 0x0003,
21225 "Number of Columns Less One", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21226
21227 {&hf_ieee80211_ff_mimo_cntrl_nr_index,
21228 {"Nr Index", "wlan_mgt.fixed.mimo.control.nrindex",
21229 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_nr_index_flags)(const struct _value_string*)(ff_mimo_cntrl_nr_index_flags), 0x000C,
21230 "Number of Rows Less One", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21231
21232 {&hf_ieee80211_ff_mimo_cntrl_channel_width,
21233 {"Channel Width", "wlan_mgt.fixed.mimo.control.chanwidth",
21234 FT_BOOLEAN, 16, TFS(&ff_mimo_cntrl_channel_width_flag)(const struct true_false_string*)(&ff_mimo_cntrl_channel_width_flag
)
, 0x0010,
21235 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21236
21237 {&hf_ieee80211_ff_mimo_cntrl_grouping,
21238 {"Grouping (Ng)", "wlan_mgt.fixed.mimo.control.grouping",
21239 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_grouping_flags)(const struct _value_string*)(ff_mimo_cntrl_grouping_flags), 0x0060,
21240 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21241
21242 {&hf_ieee80211_ff_mimo_cntrl_coefficient_size,
21243 {"Coefficient Size (Nb)", "wlan_mgt.fixed.mimo.control.cosize",
21244 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_coefficient_size_flags)(const struct _value_string*)(ff_mimo_cntrl_coefficient_size_flags
)
, 0x0180,
21245 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21246
21247 {&hf_ieee80211_ff_mimo_cntrl_codebook_info,
21248 {"Codebook Information", "wlan_mgt.fixed.mimo.control.codebookinfo",
21249 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_codebook_info_flags)(const struct _value_string*)(ff_mimo_cntrl_codebook_info_flags
)
, 0x0600,
21250 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21251
21252 {&hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment,
21253 {"Remaining Matrix Segment", "wlan_mgt.fixed.mimo.control.matrixseg",
21254 FT_UINT16, BASE_HEX, 0, 0x3800,
21255 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21256
21257 {&hf_ieee80211_ff_mimo_cntrl_reserved,
21258 {"Reserved", "wlan_mgt.fixed.mimo.control.reserved",
21259 FT_UINT16, BASE_HEX, 0, 0xC000,
21260 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21261
21262 {&hf_ieee80211_ff_mimo_cntrl_sounding_timestamp,
21263 {"Sounding Timestamp", "wlan_mgt.fixed.mimo.control.soundingtime",
21264 FT_UINT32, BASE_HEX, 0, 0,
21265 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21266
21267 {&hf_ieee80211_ff_psmp_sta_info,
21268 {"Power Save Multi-Poll (PSMP) Station Information", "wlan_mgt.fixed.psmp.stainfo",
21269 FT_UINT64, BASE_HEX, 0, 0,
21270 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21271
21272 {&hf_ieee80211_ff_psmp_sta_info_type,
21273 {"Sta Info Type", "wlan_mgt.fixed.psmp.stainfo.type",
21274 FT_UINT32, BASE_HEX, VALS(ff_psmp_sta_info_flags)(const struct _value_string*)(ff_psmp_sta_info_flags), PSMP_STA_INFO_FLAG_TYPE0x00000003,
21275 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21276
21277 {&hf_ieee80211_ff_psmp_sta_info_dtt_start_offset,
21278 {"DTT Start Offset", "wlan_mgt.fixed.psmp.stainfo.dttstart",
21279 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_DTT_START0x00001FFC,
21280 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21281
21282 {&hf_ieee80211_ff_psmp_sta_info_dtt_duration,
21283 {"DTT Duration", "wlan_mgt.fixed.psmp.stainfo.dttduration",
21284 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_DTT_DURATION0x001FE000,
21285 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21286
21287 {&hf_ieee80211_ff_psmp_sta_info_sta_id,
21288 {"Target Station ID", "wlan_mgt.fixed.psmp.stainfo.staid",
21289 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_STA_ID0x001FFFE0,
21290 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21291
21292 {&hf_ieee80211_ff_psmp_sta_info_utt_start_offset,
21293 {"UTT Start Offset", "wlan_mgt.fixed.psmp.stainfo.uttstart",
21294 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_UTT_START0x0000FFE0,
21295 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21296
21297 {&hf_ieee80211_ff_psmp_sta_info_utt_duration,
21298 {"UTT Duration", "wlan_mgt.fixed.psmp.stainfo.uttduration",
21299 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_UTT_DURATION0x03FF0000,
21300 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21301
21302 {&hf_ieee80211_ff_psmp_sta_info_reserved_small,
21303 {"Reserved", "wlan_mgt.fixed.psmp.stainfo.reserved",
21304 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_IA_RESERVED0xFC000000,
21305 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21306
21307 {&hf_ieee80211_ff_psmp_sta_info_reserved_large,
21308 {"Reserved", "wlan_mgt.fixed.psmp.stainfo.reserved64",
21309 FT_UINT64, BASE_HEX, 0, 0,
21310 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21311
21312 {&hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id,
21313 {"Power Save Multi-Poll (PSMP) Multicast ID", "wlan_mgt.fixed.psmp.stainfo.multicastid",
21314 FT_UINT64, BASE_HEX, 0, 0,
21315 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21316
21317 {&hf_ieee80211_ff_ant_selection,
21318 {"Antenna Selection", "wlan_mgt.fixed.antsel",
21319 FT_UINT8, BASE_HEX, 0, 0,
21320 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21321
21322 {&hf_ieee80211_ff_ant_selection_0,
21323 {"Antenna 0", "wlan_mgt.fixed.antsel.ant0",
21324 FT_UINT8, BASE_HEX, 0, 0x01,
21325 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21326
21327 {&hf_ieee80211_ff_ant_selection_1,
21328 {"Antenna 1", "wlan_mgt.fixed.antsel.ant1",
21329 FT_UINT8, BASE_HEX, 0, 0x02,
21330 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21331
21332 {&hf_ieee80211_ff_ant_selection_2,
21333 {"Antenna 2", "wlan_mgt.fixed.antsel.ant2",
21334 FT_UINT8, BASE_HEX, 0, 0x04,
21335 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21336
21337 {&hf_ieee80211_ff_ant_selection_3,
21338 {"Antenna 3", "wlan_mgt.fixed.antsel.ant3",
21339 FT_UINT8, BASE_HEX, 0, 0x08,
21340 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21341
21342 {&hf_ieee80211_ff_ant_selection_4,
21343 {"Antenna 4", "wlan_mgt.fixed.antsel.ant4",
21344 FT_UINT8, BASE_HEX, 0, 0x10,
21345 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21346
21347 {&hf_ieee80211_ff_ant_selection_5,
21348 {"Antenna 5", "wlan_mgt.fixed.antsel.ant5",
21349 FT_UINT8, BASE_HEX, 0, 0x20,
21350 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21351
21352 {&hf_ieee80211_ff_ant_selection_6,
21353 {"Antenna 6", "wlan_mgt.fixed.antsel.ant6",
21354 FT_UINT8, BASE_HEX, 0, 0x40,
21355 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21356
21357 {&hf_ieee80211_ff_ant_selection_7,
21358 {"Antenna 7", "wlan_mgt.fixed.antsel.ant7",
21359 FT_UINT8, BASE_HEX, 0, 0x80,
21360 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21361
21362 {&hf_ieee80211_ff_ext_channel_switch_announcement,
21363 {"Extended Channel Switch Announcement", "wlan_mgt.fixed.extchansw",
21364 FT_UINT32, BASE_HEX, 0, 0,
21365 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21366
21367 {&hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode,
21368 {"Channel Switch Mode", "wlan_mgt.fixed.extchansw.switchmode",
21369 FT_UINT32, BASE_HEX, VALS(ieee80211_tag_ext_channel_switch_announcement_switch_mode_flags)(const struct _value_string*)(ieee80211_tag_ext_channel_switch_announcement_switch_mode_flags
)
, 0x000000FF,
21370 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21371
21372 {&hf_ieee80211_ff_ext_channel_switch_announcement_new_ope_class,
21373 {"New Operating Class", "wlan_mgt.fixed.extchansw.new.opeclass",
21374 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000FF00,
21375 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21376
21377 {&hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number,
21378 {"New Channel Number", "wlan_mgt.fixed.extchansw.new.channumber",
21379 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00FF0000,
21380 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21381
21382 {&hf_ieee80211_ff_ext_channel_switch_announcement_switch_count,
21383 {"Channel Switch Count", "wlan_mgt.extchanswitch.switchcount",
21384 FT_UINT32, BASE_HEX, NULL((void*)0), 0xFF000000,
21385 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21386
21387 {&hf_ieee80211_ff_ht_info,
21388 {"HT Information", "wlan_mgt.fixed.extchansw",
21389 FT_UINT8, BASE_HEX, 0, 0,
21390 "HT Information Fixed Field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21391
21392 {&hf_ieee80211_ff_ht_info_information_request,
21393 {"Information Request", "wlan_mgt.fixed.mimo.control.chanwidth",
21394 FT_BOOLEAN, 8, TFS(&ff_ht_info_information_request_flag)(const struct true_false_string*)(&ff_ht_info_information_request_flag
)
, 0x01,
21395 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21396
21397 {&hf_ieee80211_ff_ht_info_40_mhz_intolerant,
21398 {"40 MHz Intolerant", "wlan_mgt.fixed.mimo.control.chanwidth",
21399 FT_BOOLEAN, 8, TFS(&ff_ht_info_40_mhz_intolerant_flag)(const struct true_false_string*)(&ff_ht_info_40_mhz_intolerant_flag
)
, 0x02,
21400 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21401
21402 {&hf_ieee80211_ff_ht_info_sta_chan_width,
21403 {"Station Channel Width", "wlan_mgt.fixed.mimo.control.chanwidth",
21404 FT_BOOLEAN, 8, TFS(&ff_ht_info_sta_chan_width_flag)(const struct true_false_string*)(&ff_ht_info_sta_chan_width_flag
)
, 0x04,
21405 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21406
21407 {&hf_ieee80211_ff_ht_info_reserved,
21408 {"Reserved", "wlan_mgt.fixed.extchansw",
21409 FT_UINT8, BASE_HEX, 0, 0xF8,
21410 "Reserved Field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21411
21412 {&hf_ieee80211_ff_ht_action,
21413 {"HT Action", "wlan_mgt.fixed.htact",
21414 FT_UINT8, BASE_HEX, VALS(ff_ht_action_flags)(const struct _value_string*)(ff_ht_action_flags), 0,
21415 "HT Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21416
21417 {&hf_ieee80211_ff_mimo_csi_snr,
21418 {"Signal to Noise Ratio (SNR)", "wlan_mgt.mimo.csimatrices.snr",
21419 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
21420 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21421
21422 {&hf_ieee80211_ff_mimo_csi_matrices,
21423 {"CSI Matrices", "wlan_mgt.mimo.csimatrices",
21424 FT_NONE, BASE_NONE, NULL((void*)0), 0,
21425 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21426
21427 {&hf_ieee80211_ff_mimo_csi_bf_matrices,
21428 {"Beamforming Feedback Matrices", "wlan_mgt.mimo.csimatrices.bf",
21429 FT_NONE, BASE_NONE, NULL((void*)0), 0,
21430 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21431
21432 {&hf_ieee80211_ff_mimo_csi_cbf_matrices,
21433 {"Compressed Beamforming Feedback Matrices", "wlan_mgt.mimo.csimatrices.cbf",
21434 FT_NONE, BASE_NONE, NULL((void*)0), 0,
21435 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21436 {&hf_ieee80211_ff_public_action,
21437 {"Public Action", "wlan_mgt.fixed.publicact",
21438 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x200, &ff_pa_action_codes_ext, 0,
21439 "Public Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21440
21441 {&hf_ieee80211_ff_protected_public_action,
21442 {"Protected Public Action", "wlan_mgt.fixed.publicact",
21443 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x200, &ff_ppa_action_codes_ext, 0,
21444 "Protected Public Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21445
21446 {&hf_ieee80211_ff_capture,
21447 {"Capabilities Information", "wlan_mgt.fixed.capabilities",
21448 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
21449 "Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21450
21451 {&hf_ieee80211_ff_cf_ess,
21452 {"ESS capabilities", "wlan_mgt.fixed.capabilities.ess",
21453 FT_BOOLEAN, 16, TFS(&cf_ess_flags)(const struct true_false_string*)(&cf_ess_flags), 0x0001,
21454 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21455
21456 {&hf_ieee80211_ff_cf_ibss,
21457 {"IBSS status", "wlan_mgt.fixed.capabilities.ibss",
21458 FT_BOOLEAN, 16, TFS(&cf_ibss_flags)(const struct true_false_string*)(&cf_ibss_flags), 0x0002,
21459 "IBSS participation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21460
21461 {&hf_ieee80211_ff_cf_sta_poll,
21462 {"CFP participation capabilities", "wlan_mgt.fixed.capabilities.cfpoll.sta",
21463 FT_UINT16, BASE_HEX, VALS(sta_cf_pollable)(const struct _value_string*)(sta_cf_pollable), 0x020C,
21464 "CF-Poll capabilities for a STA", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21465
21466 {&hf_ieee80211_ff_cf_ap_poll,
21467 {"CFP participation capabilities", "wlan_mgt.fixed.capabilities.cfpoll.ap",
21468 FT_UINT16, BASE_HEX, VALS(ap_cf_pollable)(const struct _value_string*)(ap_cf_pollable), 0x020C,
21469 "CF-Poll capabilities for an AP", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21470
21471 {&hf_ieee80211_ff_cf_privacy,
21472 {"Privacy", "wlan_mgt.fixed.capabilities.privacy",
21473 FT_BOOLEAN, 16, TFS(&cf_privacy_flags)(const struct true_false_string*)(&cf_privacy_flags), 0x0010,
21474 "WEP support", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21475
21476 {&hf_ieee80211_ff_cf_preamble,
21477 {"Short Preamble", "wlan_mgt.fixed.capabilities.preamble",
21478 FT_BOOLEAN, 16, TFS(&tfs_allowed_not_allowed)(const struct true_false_string*)(&tfs_allowed_not_allowed
)
, 0x0020,
21479 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21480
21481 {&hf_ieee80211_ff_cf_pbcc,
21482 {"PBCC", "wlan_mgt.fixed.capabilities.pbcc",
21483 FT_BOOLEAN, 16, TFS(&tfs_allowed_not_allowed)(const struct true_false_string*)(&tfs_allowed_not_allowed
)
, 0x0040,
21484 "PBCC Modulation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21485
21486 {&hf_ieee80211_ff_cf_agility,
21487 {"Channel Agility", "wlan_mgt.fixed.capabilities.agility",
21488 FT_BOOLEAN, 16, TFS(&tfs_inuse_not_inuse)(const struct true_false_string*)(&tfs_inuse_not_inuse), 0x0080,
21489 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21490
21491 {&hf_ieee80211_ff_cf_spec_man,
21492 {"Spectrum Management", "wlan_mgt.fixed.capabilities.spec_man",
21493 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)(const struct true_false_string*)(&tfs_implemented_not_implemented
)
, 0x0100,
21494 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21495
21496 {&hf_ieee80211_ff_short_slot_time,
21497 {"Short Slot Time", "wlan_mgt.fixed.capabilities.short_slot_time",
21498 FT_BOOLEAN, 16, TFS(&tfs_inuse_not_inuse)(const struct true_false_string*)(&tfs_inuse_not_inuse), 0x0400,
21499 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21500
21501 {&hf_ieee80211_ff_cf_apsd,
21502 {"Automatic Power Save Delivery", "wlan_mgt.fixed.capabilities.apsd",
21503 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)(const struct true_false_string*)(&tfs_implemented_not_implemented
)
, 0x0800,
21504 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21505
21506 {&hf_ieee80211_ff_radio_measurement,
21507 {"Radio Measurement", "wlan_mgt.fixed.capabilities.radio_measurement",
21508 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)(const struct true_false_string*)(&tfs_implemented_not_implemented
)
, 0x1000,
21509 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21510
21511 {&hf_ieee80211_ff_dsss_ofdm,
21512 {"DSSS-OFDM", "wlan_mgt.fixed.capabilities.dsss_ofdm",
21513 FT_BOOLEAN, 16, TFS(&tfs_allowed_not_allowed)(const struct true_false_string*)(&tfs_allowed_not_allowed
)
, 0x2000,
21514 "DSSS-OFDM Modulation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21515
21516 {&hf_ieee80211_ff_cf_del_blk_ack,
21517 {"Delayed Block Ack", "wlan_mgt.fixed.capabilities.del_blk_ack",
21518 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)(const struct true_false_string*)(&tfs_implemented_not_implemented
)
, 0x4000,
21519 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21520
21521 {&hf_ieee80211_ff_cf_imm_blk_ack,
21522 {"Immediate Block Ack", "wlan_mgt.fixed.capabilities.imm_blk_ack",
21523 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)(const struct true_false_string*)(&tfs_implemented_not_implemented
)
, 0x8000,
21524 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21525
21526 {&hf_ieee80211_ff_auth_seq,
21527 {"Authentication SEQ", "wlan_mgt.fixed.auth_seq",
21528 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
21529 "Authentication Sequence Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21530
21531 {&hf_ieee80211_ff_assoc_id,
21532 {"Association ID", "wlan_mgt.fixed.aid",
21533 FT_UINT16, BASE_HEX, NULL((void*)0), 0x3FFF,
21534 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21535
21536 {&hf_ieee80211_ff_listen_ival,
21537 {"Listen Interval", "wlan_mgt.fixed.listen_ival",
21538 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
21539 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21540
21541 {&hf_ieee80211_ff_current_ap,
21542 {"Current AP", "wlan_mgt.fixed.current_ap",
21543 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
21544 "MAC address of current AP", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21545
21546 {&hf_ieee80211_ff_reason,
21547 {"Reason code", "wlan_mgt.fixed.reason_code",
21548 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x200, &ieee80211_reason_code_ext, 0,
21549 "Reason for unsolicited notification", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21550
21551 {&hf_ieee80211_ff_status_code,
21552 {"Status code", "wlan_mgt.fixed.status_code",
21553 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x200, &ieee80211_status_code_ext, 0,
21554 "Status of requested event", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21555
21556 {&hf_ieee80211_ff_category_code,
21557 {"Category code", "wlan_mgt.fixed.category_code",
21558 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x200, &category_codes_ext, 0,
21559 "Management action category", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21560
21561 {&hf_ieee80211_ff_action_code,
21562 {"Action code", "wlan_mgt.fixed.action_code",
21563 FT_UINT16, BASE_DEC, VALS(action_codes)(const struct _value_string*)(action_codes), 0,
21564 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21565
21566 {&hf_ieee80211_ff_dialog_token,
21567 {"Dialog token", "wlan_mgt.fixed.dialog_token",
21568 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
21569 "Management action dialog token", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21570
21571 {&hf_ieee80211_ff_followup_dialog_token,
21572 {"Followup Dialog token", "wlan_mgt.fixed.followup_dialog_token",
21573 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
21574 "Management action followup dialog token", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21575
21576 {&hf_ieee80211_ff_marvell_action_type,
21577 {"Marvell Action type", "wlan_mgt.fixed.mrvl_action_type",
21578 FT_UINT8, BASE_DEC, VALS(vendor_action_types_mrvl)(const struct _value_string*)(vendor_action_types_mrvl), 0,
21579 "Vendor Specific Action Type (Marvell)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21580
21581 {&hf_ieee80211_ff_marvell_mesh_mgt_action_code,
21582 {"Mesh action(Marvell)", "wlan_mgt.fixed.mrvl_mesh_action",
21583 FT_UINT8, BASE_HEX, VALS(mesh_mgt_action_codes_mrvl)(const struct _value_string*)(mesh_mgt_action_codes_mrvl), 0,
21584 "Mesh action code(Marvell)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21585
21586 {&hf_ieee80211_ff_marvell_mesh_mgt_length,
21587 {"Message Length", "wlan_mgt.fixed.length",
21588 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
21589 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21590
21591 {&hf_ieee80211_ff_marvell_mesh_mgt_mode,
21592 {"Message Mode", "wlan_mgt.fixed.mode",
21593 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
21594 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21595
21596 {&hf_ieee80211_ff_marvell_mesh_mgt_ttl,
21597 {"Message TTL", "wlan_mgt.fixed.ttl",
21598 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
21599 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21600
21601 {&hf_ieee80211_ff_marvell_mesh_mgt_dstcount,
21602 {"Destination Count", "wlan_mgt.fixed.dstcount",
21603 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
21604 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21605
21606 {&hf_ieee80211_ff_marvell_mesh_mgt_hopcount,
21607 {"Hop Count", "wlan_mgt.fixed.hopcount",
21608 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
21609 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21610
21611 {&hf_ieee80211_ff_marvell_mesh_mgt_rreqid,
21612 {"RREQ ID", "wlan_mgt.fixed.rreqid",
21613 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
21614 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21615
21616 {&hf_ieee80211_ff_marvell_mesh_mgt_sa,
21617 {"Source Address", "wlan_mgt.fixed.sa",
21618 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
21619 "Source MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21620
21621 {&hf_ieee80211_ff_marvell_mesh_mgt_ssn,
21622 {"SSN", "wlan_mgt.fixed.ssn",
21623 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
21624 "Source Sequence Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21625
21626 {&hf_ieee80211_ff_marvell_mesh_mgt_metric,
21627 {"Metric", "wlan_mgt.fixed.metric",
21628 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
21629 "Route Metric", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21630
21631 {&hf_ieee80211_ff_marvell_mesh_mgt_flags,
21632 {"RREQ Flags", "wlan_mgt.fixed.hopcount",
21633 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
21634 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21635
21636 {&hf_ieee80211_ff_marvell_mesh_mgt_da,
21637 {"Destination Address", "wlan_mgt.fixed.da",
21638 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
21639 "Destination MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21640
21641 {&hf_ieee80211_ff_marvell_mesh_mgt_dsn,
21642 {"DSN", "wlan_mgt.fixed.dsn",
21643 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
21644 "Destination Sequence Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21645
21646 {&hf_ieee80211_ff_marvell_mesh_mgt_lifetime,
21647 {"Lifetime", "wlan_mgt.fixed.lifetime",
21648 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
21649 "Route Lifetime", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21650
21651 {&hf_ieee80211_ff_wme_action_code,
21652 {"Action code", "wlan_mgt.fixed.action_code",
21653 FT_UINT16, BASE_HEX, VALS(wme_action_codes)(const struct _value_string*)(wme_action_codes), 0,
21654 "Management notification action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21655
21656 {&hf_ieee80211_ff_wme_status_code,
21657 {"Status code", "wlan_mgt.fixed.status_code",
21658 FT_UINT16, BASE_HEX, VALS(wme_status_codes)(const struct _value_string*)(wme_status_codes), 0,
21659 "Management notification setup response status code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21660
21661 {&hf_ieee80211_ff_mesh_action,
21662 {"Mesh Action code", "wlan_mgt.fixed.mesh_action",
21663 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x200, &mesh_action_ext, 0,
21664 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21665
21666 {&hf_ieee80211_ff_multihop_action,
21667 {"Multihop Action code", "wlan_mgt.fixed.multihop_action",
21668 FT_UINT8, BASE_HEX, VALS(multihop_action)(const struct _value_string*)(multihop_action), 0,
21669 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21670
21671 {&hf_ieee80211_ff_mesh_flags,
21672 {"Mesh Flags", "wlan_mgt.fixed.mesh_flags",
21673 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
21674 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21675
21676 {&hf_ieee80211_ff_mesh_ttl,
21677 {"Mesh TTL", "wlan_mgt.fixed.mesh_ttl",
21678 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
21679 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21680
21681 {&hf_ieee80211_ff_mesh_sequence,
21682 {"Sequence Number", "wlan_mgt.fixed.mesh_sequence",
21683 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
21684 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21685
21686 {&hf_ieee80211_ff_mesh_addr4,
21687 {"Mesh Extended Address 4", "wlan_mgt.fixed.mesh_addr4",
21688 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
21689 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21690
21691 {&hf_ieee80211_ff_mesh_addr5,
21692 {"Mesh Extended Address 5", "wlan_mgt.fixed.mesh_addr5",
21693 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
21694 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21695
21696 {&hf_ieee80211_ff_mesh_addr6,
21697 {"Mesh Extended Address 6", "wlan_mgt.fixed.mesh_addr6",
21698 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
21699 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21700
21701 {&hf_ieee80211_ff_selfprot_action,
21702 {"Self-protected Action code", "wlan_mgt.fixed.selfprot_action",
21703 FT_UINT8, BASE_HEX, VALS(selfprot_action)(const struct _value_string*)(selfprot_action), 0,
21704 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21705
21706 {&hf_ieee80211_mesh_peering_proto,
21707 {"Mesh Peering Protocol ID", "wlan.peering.proto",
21708 FT_UINT16, BASE_HEX, VALS(mesh_peering_proto_ids)(const struct _value_string*)(mesh_peering_proto_ids), 0,
21709 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21710
21711 {&hf_ieee80211_mesh_peering_local_link_id,
21712 {"Local Link ID", "wlan.peering.local_id",
21713 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
21714 "Mesh Peering Management Local Link ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21715
21716 {&hf_ieee80211_mesh_peering_peer_link_id,
21717 {"Peer Link ID", "wlan.peering.peer_id",
21718 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
21719 "Mesh Peering Management Peer Link ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21720
21721 {&hf_ieee80211_ff_hwmp_flags,
21722 {"HWMP Flags", "wlan.hwmp.flags",
21723 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
21724 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21725
21726 {&hf_ieee80211_ff_hwmp_hopcount,
21727 {"HWMP Hop Count", "wlan.hwmp.hopcount",
21728 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
21729 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21730
21731 {&hf_ieee80211_ff_hwmp_ttl,
21732 {"HWMP TTL", "wlan.hwmp.ttl",
21733 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
21734 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21735
21736 {&hf_ieee80211_ff_hwmp_pdid,
21737 {"HWMP Path Discovery ID", "wlan.hwmp.pdid",
21738 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
21739 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21740
21741 {&hf_ieee80211_ff_hwmp_orig_sta,
21742 {"Originator STA Address", "wlan.hwmp.orig_sta",
21743 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
21744 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21745
21746 {&hf_ieee80211_ff_hwmp_orig_sn,
21747 {"HWMP Originator Sequence Number", "wlan.hwmp.orig_sn",
21748 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
21749 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
21750
21751 {&hf_ieee80211_ff_hwmp_orig_ext,
21752 {"Originator External Address", "wlan.hwmp.orig_ext",
21753 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
21754 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21755
21756 {&hf_ieee80211_ff_hwmp_lifetime,
21757 {"HWMP Lifetime", "wlan.hwmp.lifetime",
21758 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
21759 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21760
21761 {&hf_ieee80211_ff_hwmp_metric,
21762 {"HWMP Metric", "wlan.hwmp.metric",
21763 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
21764 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21765
21766 {&hf_ieee80211_ff_hwmp_targ_count,
21767 {"HWMP Target Count", "wlan.hwmp.targ_count",
21768 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
21769 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21770
21771 {&hf_ieee80211_ff_hwmp_targ_flags,
21772 {"HWMP Per-Target Flags", "wlan.hwmp.targ_flags",
21773 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
21774 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21775
21776 {&hf_ieee80211_ff_hwmp_targ_to_flags,
21777 {"TO Flag", "wlan.hwmp.to_flag",
21778 FT_BOOLEAN, 8, TFS(&hwmp_targ_to_flags)(const struct true_false_string*)(&hwmp_targ_to_flags), 0x01,
21779 "Target Only Flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21780
21781 {&hf_ieee80211_ff_hwmp_targ_usn_flags,
21782 {"USN Flag", "wlan.hwmp.usn_flag",
21783 FT_BOOLEAN, 8, TFS(&hwmp_targ_usn_flags)(const struct true_false_string*)(&hwmp_targ_usn_flags), 0x04,
21784 "Unknown Target HWMP Sequence Number Flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21785
21786 {&hf_ieee80211_ff_hwmp_targ_sta,
21787 {"Target STA Address", "wlan.hwmp.targ_sta",
21788 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
21789 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21790
21791 {&hf_ieee80211_ff_hwmp_targ_ext,
21792 {"Target External Address", "wlan.hwmp.targ_ext",
21793 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
21794 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21795
21796 {&hf_ieee80211_ff_hwmp_targ_sn,
21797 {"Target HWMP Sequence Number", "wlan.hwmp.targ_sn",
21798 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
21799 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21800
21801 {&hf_ieee80211_mesh_config_path_sel_protocol,
21802 {"Path Selection Protocol", "wlan.mesh.config.ps_protocol",
21803 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
21804 "Mesh Configuration Path Selection Protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21805
21806 {&hf_ieee80211_mesh_config_path_sel_metric,
21807 {"Path Selection Metric", "wlan.mesh.config.ps_metric",
21808 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
21809 "Mesh Configuration Path Selection Metric", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21810
21811 {&hf_ieee80211_mesh_config_congestion_control,
21812 {"Congestion Control", "wlan.mesh.config.cong_ctl",
21813 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
21814 "Mesh Configuration Congestion Control", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21815
21816 {&hf_ieee80211_mesh_config_sync_method,
21817 {"Synchronization Method", "wlan.mesh.config.sync_method",
21818 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
21819 "Mesh Configuration Synchronization Method", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21820
21821 {&hf_ieee80211_mesh_config_auth_protocol,
21822 {"Authentication Protocol", "wlan.mesh.config.auth_protocol",
21823 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
21824 "Mesh Configuration Authentication Protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21825
21826 {&hf_ieee80211_mesh_config_formation_info,
21827 {"Formation Info", "wlan.mesh.config.formation_info",
21828 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
21829 "Mesh Configuration Formation Info", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21830
21831 {&hf_ieee80211_mesh_form_info_num_of_peerings,
21832 {"Number of Peerings", "wlan.mesh.config.formation_info.num_peers",
21833 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7E,
21834 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21835
21836 {&hf_ieee80211_mesh_config_capability,
21837 {"Capability", "wlan.mesh.config.cap",
21838 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
21839 "Mesh Configuration Capability", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21840
21841 {&hf_ieee80211_mesh_config_cap_accepting,
21842 {"Accepting Additional Mesh Peerings", "wlan.mesh.config.cap.accept",
21843 FT_BOOLEAN, 8, TFS(&tfs_yes_no)(const struct true_false_string*)(&tfs_yes_no), 0x01,
21844 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21845
21846 {&hf_ieee80211_mesh_config_cap_mcca_support,
21847 {"MCCA Support", "wlan.mesh.config.cap.mcca_support",
21848 FT_BOOLEAN, 8, TFS(&tfs_yes_no)(const struct true_false_string*)(&tfs_yes_no), 0x02,
21849 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21850
21851 {&hf_ieee80211_mesh_config_cap_mcca_enabled,
21852 {"MCCA Enabled", "wlan.mesh.config.cap.mcca_enabled",
21853 FT_BOOLEAN, 8, TFS(&tfs_yes_no)(const struct true_false_string*)(&tfs_yes_no), 0x04,
21854 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21855
21856 {&hf_ieee80211_mesh_config_cap_forwarding,
21857 {"Mesh Forwarding", "wlan.mesh.config.cap.forwarding",
21858 FT_BOOLEAN, 8, TFS(&tfs_yes_no)(const struct true_false_string*)(&tfs_yes_no), 0x08,
21859 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21860
21861 {&hf_ieee80211_mesh_config_cap_mbca_enabled,
21862 {"MBCA Enabled", "wlan.mesh.config.cap.mbca_enabled",
21863 FT_BOOLEAN, 8, TFS(&tfs_yes_no)(const struct true_false_string*)(&tfs_yes_no), 0x10,
21864 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21865
21866 {&hf_ieee80211_mesh_config_cap_tbtt_adjusting,
21867 {"TBTT Adjustment", "wlan.mesh.config.cap.tbtt_adjusting",
21868 FT_BOOLEAN, 8, TFS(&tfs_yes_no)(const struct true_false_string*)(&tfs_yes_no), 0x20,
21869 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21870
21871 {&hf_ieee80211_mesh_config_cap_power_save_level,
21872 {"Power Save", "wlan.mesh.config.cap.power_save_level",
21873 FT_BOOLEAN, 8, TFS(&mesh_config_cap_power_save_level_flags)(const struct true_false_string*)(&mesh_config_cap_power_save_level_flags
)
, 0x40,
21874 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21875
21876 {&hf_ieee80211_mesh_id,
21877 {"Mesh ID", "wlan.mesh.id",
21878 FT_STRING, BASE_NONE, NULL((void*)0), 0,
21879 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21880
21881 {&hf_ieee80211_rann_flags,
21882 {"RANN Flags", "wlan.rann.flags",
21883 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
21884 "Root Announcement Flags", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21885
21886 {&hf_ieee80211_rann_root_sta,
21887 {"Root STA Address", "wlan.rann.root_sta", FT_ETHER, BASE_NONE, NULL((void*)0), 0,
21888 "Root Mesh STA Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21889
21890 {&hf_ieee80211_rann_sn,
21891 {"Root STA Sequence Number", "wlan.rann.rann_sn",
21892 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
21893 "Root Mesh STA Sequence Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21894
21895 {&hf_ieee80211_rann_interval,
21896 {"RANN Interval", "wlan.rann.interval",
21897 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
21898 "Root Announcement Interval", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21899
21900 {&hf_ieee80211_ff_qos_action_code,
21901 {"Action code", "wlan_mgt.fixed.action_code",
21902 FT_UINT16, BASE_HEX, VALS(qos_action_codes)(const struct _value_string*)(qos_action_codes), 0,
21903 "QoS management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21904
21905 {&hf_ieee80211_ff_ba_action,
21906 {"Action code", "wlan_mgt.fixed.action_code",
21907 FT_UINT8, BASE_HEX, VALS(ba_action_codes)(const struct _value_string*)(ba_action_codes), 0,
21908 "Block Ack action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21909
21910 {&hf_ieee80211_ff_check_beacon,
21911 {"Check Beacon", "wlan_mgt.fixed.check_beacon",
21912 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
21913 "Unprotected WNM Check Beacon", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21914
21915 {&hf_ieee80211_ff_tod,
21916 {"TOD", "wlan_mgt.fixed.tod",
21917 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
21918 "Previous TS of transmit antenna port", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21919
21920 {&hf_ieee80211_ff_toa,
21921 {"TOA", "wlan_mgt.fixed.toa",
21922 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
21923 "Previous TS of receive antenna port", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21924
21925 {&hf_ieee80211_ff_max_tod_err,
21926 {"MAX TOD ERROR", "wlan_mgt.fixed.max_tod_err",
21927 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
21928 "Maximal Error at Previous TS of transmit antenna port", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21929
21930 {&hf_ieee80211_ff_max_toa_err,
21931 {"MAX TOA ERROR", "wlan_mgt.fixed.max_toa_err",
21932 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
21933 "Maximal Error at Previous TS of receive antenna port", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21934
21935 {&hf_ieee80211_ff_dls_action_code,
21936 {"Action code", "wlan_mgt.fixed.action_code",
21937 FT_UINT16, BASE_HEX, VALS(dls_action_codes)(const struct _value_string*)(dls_action_codes), 0,
21938 "DLS management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21939
21940 {&hf_ieee80211_ff_dst_mac_addr,
21941 {"Destination address", "wlan_mgt.fixed.dst_mac_addr",
21942 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
21943 "Destination MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21944
21945 {&hf_ieee80211_ff_src_mac_addr,
21946 {"Source address", "wlan_mgt.fixed.src_mac_addr",
21947 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
21948 "Source MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21949
21950 {&hf_ieee80211_ff_req_ap_addr,
21951 {"RequesterAP address", "wlan_mgt.fixed.req_ap_addr",
21952 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
21953 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21954
21955 {&hf_ieee80211_ff_res_ap_addr,
21956 {"ResponderAP address", "wlan_mgt.fixed.res_ap_addr",
21957 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
21958 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21959
21960 {&hf_ieee80211_ff_ft_action_code,
21961 {"Action code", "wlan_mgt.fixed.action_code",
21962 FT_UINT8, BASE_DEC, VALS(ft_action_codes)(const struct _value_string*)(ft_action_codes), 0,
21963 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21964
21965 {&hf_ieee80211_ff_sta_address,
21966 {"STA Address", "wlan_mgt.fixed.sta_address",
21967 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
21968 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21969
21970 {&hf_ieee80211_ff_target_ap_address,
21971 {"Target AP Address", "wlan_mgt.fixed.target_ap_address",
21972 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
21973 "Target AP MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21974
21975 {&hf_ieee80211_ff_gas_comeback_delay,
21976 {"GAS Comeback Delay", "wlan_mgt.fixed.gas_comeback_delay",
21977 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
21978 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21979
21980 {&hf_ieee80211_ff_gas_fragment_id,
21981 {"GAS Query Response Fragment ID", "wlan_mgt.fixed.gas_fragment_id",
21982 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7f,
21983 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21984
21985 {&hf_ieee80211_ff_more_gas_fragments,
21986 {"More GAS Fragments", "wlan_mgt.fixed.more_gas_fragments",
21987 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
21988 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21989
21990 {&hf_ieee80211_ff_query_request_length,
21991 {"Query Request Length", "wlan_mgt.fixed.query_request_length",
21992 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
21993 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21994
21995 {&hf_ieee80211_ff_query_request,
21996 {"Query Request", "wlan_mgt.fixed.query_request",
21997 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
21998 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
21999
22000 {&hf_ieee80211_ff_query_response_length,
22001 {"Query Response Length", "wlan_mgt.fixed.query_response_length",
22002 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
22003 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22004
22005 {&hf_ieee80211_ff_query_response,
22006 {"Query Response", "wlan_mgt.fixed.query_response",
22007 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
22008 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22009
22010 {&hf_ieee80211_gas_resp_fragments,
22011 {"GAS Query Response fragments", "wlan_mgt.fixed.fragments",
22012 FT_NONE, BASE_NONE, NULL((void*)0), 0x00,
22013 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
22014
22015 {&hf_ieee80211_gas_resp_fragment,
22016 {"GAS Query Response fragment", "wlan_mgt.fixed.fragment",
22017 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x00,
22018 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
22019
22020 {&hf_ieee80211_gas_resp_fragment_overlap,
22021 {"GAS Query Response fragment overlap", "wlan_mgt.fixed.fragment.overlap",
22022 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x00,
22023 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
22024
22025 {&hf_ieee80211_gas_resp_fragment_overlap_conflict,
22026 {"GAS Query Response fragment overlapping with conflicting data", "wlan_mgt.fixed.fragment.overlap.conflicts",
22027 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x00,
22028 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
22029
22030 {&hf_ieee80211_gas_resp_fragment_multiple_tails,
22031 {"GAS Query Response has multiple tail fragments", "wlan_mgt.fixed.fragment.multiple_tails",
22032 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x00,
22033 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
22034
22035 {&hf_ieee80211_gas_resp_fragment_too_long_fragment,
22036 {"GAS Query Response fragment too long", "wlan_mgt.fixed.fragment.too_long_fragment",
22037 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x00,
22038 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
22039
22040 {&hf_ieee80211_gas_resp_fragment_error,
22041 {"GAS Query Response reassembly error", "wlan_mgt.fixed.fragment.error",
22042 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x00,
22043 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
22044
22045 {&hf_ieee80211_gas_resp_fragment_count,
22046 {"GAS Query Response fragment count", "wlan_mgt.fixed.fragment.count",
22047 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00,
22048 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
22049
22050 {&hf_ieee80211_gas_resp_reassembled_in,
22051 {"Reassembled in", "wlan_mgt.fixed.reassembled.in",
22052 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x00,
22053 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
22054
22055 {&hf_ieee80211_gas_resp_reassembled_length,
22056 {"Reassembled length", "wlan_mgt.fixed.reassembled.length",
22057 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00,
22058 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
22059
22060 {&hf_ieee80211_ff_anqp_info_id,
22061 {"Info ID", "wlan_mgt.fixed.anqp.info_id",
22062 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x200, &anqp_info_id_vals_ext, 0,
22063 "Access Network Query Protocol Info ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22064
22065 {&hf_ieee80211_ff_anqp_info_length,
22066 {"Length", "wlan_mgt.fixed.anqp.info_length",
22067 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
22068 "Access Network Query Protocol Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22069
22070 {&hf_ieee80211_ff_anqp_info,
22071 {"Information", "wlan_mgt.fixed.anqp.info",
22072 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
22073 "Access Network Query Protocol Information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22074
22075 {&hf_ieee80211_ff_anqp_query_id,
22076 {"ANQP Query ID", "wlan_mgt.fixed.anqp.query_id",
22077 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x200, &anqp_info_id_vals_ext, 0,
22078 "Access Network Query Protocol Query ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22079
22080 {&hf_ieee80211_ff_anqp_capability,
22081 {"ANQP Capability", "wlan_mgt.fixed.anqp.capability",
22082 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x200, &anqp_info_id_vals_ext, 0,
22083 "Access Network Query Protocol Query ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22084
22085 {&hf_ieee80211_ff_anqp_capability_vlen,
22086 {"Vendor-specific Capability Length", "wlan_mgt.fixed.anqp.capability_vlen",
22087 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
22088 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22089
22090 {&hf_ieee80211_ff_anqp_capability_vendor,
22091 {"Vendor-specific Capability", "wlan_mgt.fixed.anqp.capability_vendor",
22092 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
22093 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22094
22095 {&hf_ieee80211_ff_venue_info_group,
22096 {"Venue Group", "wlan_mgt.fixed.venue_info.group",
22097 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x200, &venue_group_vals_ext, 0,
22098 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22099
22100 {&hf_ieee80211_ff_venue_info_type,
22101 {"Venue Type", "wlan_mgt.fixed.venue_info.type",
22102 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22103 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22104
22105 {&hf_ieee80211_ff_anqp_venue_length,
22106 {"Venue Name Duple Length", "wlan_mgt.fixed.anqp.venue.length",
22107 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22108 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22109
22110 {&hf_ieee80211_ff_anqp_venue_language,
22111 {"Language Code", "wlan_mgt.fixed.anqp.venue.language",
22112 FT_STRING, BASE_NONE, NULL((void*)0), 0,
22113 "Venue Name Language Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22114
22115 {&hf_ieee80211_ff_anqp_venue_name,
22116 {"Venue Name", "wlan_mgt.fixed.anqp.venue.name",
22117 FT_STRING, BASE_NONE, NULL((void*)0), 0,
22118 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22119
22120 {&hf_ieee80211_ff_anqp_nw_auth_type_indicator,
22121 {"Network Authentication Type Indicator", "wlan_mgt.fixed.anqp.nw_auth_type.indicator",
22122 FT_UINT8, BASE_DEC, VALS(nw_auth_type_vals)(const struct _value_string*)(nw_auth_type_vals), 0,
22123 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22124
22125 {&hf_ieee80211_ff_anqp_nw_auth_type_url_len,
22126 {"Re-direct URL Length", "wlan_mgt.fixed.anqp.nw_auth_type.url_len",
22127 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
22128 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22129
22130 {&hf_ieee80211_ff_anqp_nw_auth_type_url,
22131 {"Re-direct URL", "wlan_mgt.fixed.anqp.nw_auth_type_url",
22132 FT_STRING, BASE_NONE, NULL((void*)0), 0,
22133 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22134
22135 {&hf_ieee80211_ff_anqp_roaming_consortium_oi_len,
22136 {"OI Length", "wlan_mgt.fixed.anqp.roaming_consortium.oi_len",
22137 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22138 "Roaming Consortium OI Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22139
22140 {&hf_ieee80211_ff_anqp_roaming_consortium_oi,
22141 {"OI", "wlan_mgt.fixed.anqp.roaming_consortium.oi",
22142 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
22143 "Roaming Consortium OI", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22144
22145 {&hf_ieee80211_ff_anqp_ip_addr_avail_ipv6,
22146 {"IPv6 Address", "wlan_mgt.fixed.anqp.ip_addr_availability.ipv6",
22147 FT_UINT8, BASE_DEC, VALS(ip_addr_avail_ipv6_vals)(const struct _value_string*)(ip_addr_avail_ipv6_vals), 0x03,
22148 "IP Address Type Availability information for IPv6", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22149
22150 {&hf_ieee80211_ff_anqp_ip_addr_avail_ipv4,
22151 {"IPv4 Address", "wlan_mgt.fixed.anqp.ip_addr_availability.ipv4",
22152 FT_UINT8, BASE_DEC, VALS(ip_addr_avail_ipv4_vals)(const struct _value_string*)(ip_addr_avail_ipv4_vals), 0xfc,
22153 "IP Address Type Availability information for IPv4", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22154
22155 {&hf_ieee80211_ff_anqp_nai_realm_count,
22156 {"NAI Realm Count", "wlan_mgt.fixed.anqp.nai_realm_list.count",
22157 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
22158 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22159
22160 {&hf_ieee80211_ff_anqp_nai_field_len,
22161 {"NAI Realm Data Field Length", "wlan_mgt.fixed.anqp.nai_realm_list.field_len",
22162 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
22163 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22164
22165 {&hf_ieee80211_ff_anqp_nai_realm_encoding,
22166 {"NAI Realm Encoding", "wlan_mgt.fixed.naqp_nai_realm_list.encoding",
22167 FT_UINT8, BASE_DEC, VALS(nai_realm_encoding_vals)(const struct _value_string*)(nai_realm_encoding_vals), 0x01,
22168 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22169
22170 {&hf_ieee80211_ff_anqp_nai_realm_length,
22171 {"NAI Realm Length", "wlan_mgt.fixed.naqp_nai_realm_list.realm_length",
22172 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22173 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22174
22175 {&hf_ieee80211_ff_anqp_nai_realm,
22176 {"NAI Realm", "wlan_mgt.fixed.naqp_nai_realm_list.realm",
22177 FT_STRING, BASE_NONE, NULL((void*)0), 0,
22178 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22179
22180 {&hf_ieee80211_ff_anqp_nai_realm_eap_count,
22181 {"EAP Method Count", "wlan_mgt.fixed.naqp_nai_realm_list.eap_method_count",
22182 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22183 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22184
22185 {&hf_ieee80211_ff_anqp_nai_realm_eap_len,
22186 {"EAP Method subfield Length", "wlan_mgt.fixed.naqp_nai_realm_list.eap_method_len",
22187 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22188 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22189
22190 {&hf_ieee80211_ff_anqp_nai_realm_eap_method,
22191 {"EAP Method", "wlan_mgt.fixed.naqp_nai_realm_list.eap_method",
22192 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x200, &eap_type_vals_ext, 0,
22193 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22194
22195 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_count,
22196 {"Authentication Parameter Count", "wlan_mgt.fixed.naqp_nai_realm_list.auth_param_count",
22197 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22198 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22199
22200 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_id,
22201 {"Authentication Parameter ID", "wlan_mgt.fixed.naqp_nai_realm_list.auth_param_id",
22202 FT_UINT8, BASE_DEC, VALS(nai_realm_auth_param_id_vals)(const struct _value_string*)(nai_realm_auth_param_id_vals), 0,
22203 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22204
22205 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_len,
22206 {"Authentication Parameter Length", "wlan_mgt.fixed.naqp_nai_realm_list.auth_param_len",
22207 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22208 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22209
22210 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_value,
22211 {"Authentication Parameter Value", "wlan_mgt.fixed.naqp_nai_realm_list.auth_param_value",
22212 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
22213 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22214
22215 {&hf_ieee80211_3gpp_gc_gud,
22216 {"GUD", "wlan_mgt.fixed.anqp.3gpp_cellular_info.gud",
22217 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22218 "Generic container User Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22219
22220 {&hf_ieee80211_3gpp_gc_udhl,
22221 {"UDHL", "wlan_mgt.fixed.anqp.3gpp_cellular_info.udhl",
22222 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22223 "User Data Header Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22224
22225 {&hf_ieee80211_3gpp_gc_iei,
22226 {"IEI", "wlan_mgt.fixed.anqp.3gpp_cellular_info.iei",
22227 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22228 "Information Element Identity", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22229
22230 {&hf_ieee80211_3gpp_gc_plmn_len,
22231 {"PLMN Length", "wlan_mgt.fixed.anqp.3gpp_cellular_info.plmn_len",
22232 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22233 "Length of PLMN List value contents", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22234
22235 {&hf_ieee80211_3gpp_gc_num_plmns,
22236 {"Number of PLMNs", "wlan_mgt.fixed.anqp.3gpp_cellular_info.num_plmns",
22237 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22238 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22239
22240 {&hf_ieee80211_ff_anqp_domain_name_len,
22241 {"Domain Name Length", "wlan_mgt.fixed.anqp.domain_name_list.len",
22242 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22243 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22244
22245 {&hf_ieee80211_ff_anqp_domain_name,
22246 {"Domain Name", "wlan_mgt.fixed.anqp.domain_name_list.name",
22247 FT_STRING, BASE_NONE, NULL((void*)0), 0,
22248 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22249
22250 {&hf_ieee80211_ff_dls_timeout,
22251 {"DLS timeout", "wlan_mgt.fixed.dls_timeout",
22252 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
22253 "DLS timeout value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22254
22255 {&hf_ieee80211_ff_sa_query_action_code,
22256 {"Action code", "wlan_mgt.fixed.action_code",
22257 FT_UINT8, BASE_DEC, VALS(sa_query_action_codes)(const struct _value_string*)(sa_query_action_codes), 0,
22258 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22259
22260 {&hf_ieee80211_ff_transaction_id,
22261 {"Transaction Id", "wlan_mgt.fixed.transaction_id",
22262 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
22263 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22264
22265 {&hf_ieee80211_anqp_wfa_subtype,
22266 {"ANQP WFA Subtype", "wlan_mgt.anqp.wfa.subtype",
22267 FT_UINT8, BASE_DEC, VALS(wfa_subtype_vals)(const struct _value_string*)(wfa_subtype_vals), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22268
22269 {&hf_hs20_indication_dgaf_disabled,
22270 {"DGAF Disabled", "wlan_mgt.hs20.indication.dgaf_disabled",
22271 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22272
22273 {&hf_hs20_indication_pps_mo_id_present,
22274 {"PPS MO ID Present", "wlan_mgt.hs20.indication.pps_mo_id_present",
22275 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22276
22277 {&hf_hs20_indication_anqp_domain_id_present,
22278 {"ANQP Domain ID Present", "wlan_mgt.hs20.indication.anqp_domain_id_present",
22279 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22280
22281 {&hf_hs20_indication_release_number,
22282 {"Release Number", "wlan_mgt.hs20.indication.release_number",
22283 FT_UINT8, BASE_DEC, VALS(hs20_indication_release_number_vals)(const struct _value_string*)(hs20_indication_release_number_vals
)
, 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22284
22285 {&hf_hs20_anqp_subtype,
22286 {"Subtype", "wlan_mgt.hs20.anqp.subtype",
22287 FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals)(const struct _value_string*)(hs20_anqp_subtype_vals), 0,
22288 "Hotspot 2.0 ANQP Subtype", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22289
22290 {&hf_hs20_anqp_reserved,
22291 {"Reserved", "wlan_mgt.hs20.anqp.reserved",
22292 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22293
22294 {&hf_hs20_anqp_payload,
22295 {"Payload", "wlan_mgt.hs20.anqp.payload",
22296 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
22297 "Hotspot 2.0 ANQP Payload", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22298
22299 {&hf_hs20_anqp_hs_query_list,
22300 {"Queried Subtype", "wlan_mgt.hs20.anqp.hs_query_list",
22301 FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals)(const struct _value_string*)(hs20_anqp_subtype_vals), 0,
22302 "Queried HS 2.0 Element Subtype", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22303
22304 {&hf_hs20_anqp_hs_capability_list,
22305 {"Capability", "wlan_mgt.hs20.anqp.hs_capability_list",
22306 FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals)(const struct _value_string*)(hs20_anqp_subtype_vals), 0,
22307 "Hotspot 2.0 ANQP Subtype Capability", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22308
22309 {&hf_hs20_anqp_ofn_length,
22310 {"Length", "wlan_mgt.hs20.anqp.ofn.length",
22311 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22312 "Operator Friendly Name Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22313
22314 {&hf_hs20_anqp_ofn_language,
22315 {"Language Code", "wlan_mgt.hs20.anqp.ofn.language",
22316 FT_STRING, BASE_NONE, NULL((void*)0), 0,
22317 "Operator Friendly Name Language Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22318
22319 {&hf_hs20_anqp_ofn_name,
22320 {"Operator Friendly Name", "wlan_mgt.hs20.anqp.ofn.name",
22321 FT_STRING, BASE_NONE, NULL((void*)0), 0,
22322 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22323
22324 {&hf_hs20_anqp_wan_metrics_link_status,
22325 {"Link Status", "wlan_mgt.hs20.anqp.wan_metrics.link_status",
22326 FT_UINT8, BASE_DEC, VALS(hs20_wm_link_status_vals)(const struct _value_string*)(hs20_wm_link_status_vals), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22327
22328 {&hf_hs20_anqp_wan_metrics_symmetric_link,
22329 {"Symmetric Link", "wlan_mgt.hs20.anqp.wan_metrics.symmetric_link",
22330 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22331
22332 {&hf_hs20_anqp_wan_metrics_at_capacity,
22333 {"At Capacity", "wlan_mgt.hs20.anqp.wan_metrics.at_capacity",
22334 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22335
22336 {&hf_hs20_anqp_wan_metrics_reserved,
22337 {"Reserved", "wlan_mgt.hs20.anqp.wan_metrics.reserved",
22338 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22339
22340 {&hf_hs20_anqp_wan_metrics_downlink_speed,
22341 {"Downlink Speed", "wlan_mgt.hs20.anqp.wan_metrics.downlink_speed",
22342 FT_UINT32, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22343
22344 {&hf_hs20_anqp_wan_metrics_uplink_speed,
22345 {"Uplink Speed", "wlan_mgt.hs20.anqp.wan_metrics.uplink_speed",
22346 FT_UINT32, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22347
22348 {&hf_hs20_anqp_wan_metrics_downlink_load,
22349 {"Downlink Load", "wlan_mgt.hs20.anqp.wan_metrics.downlink_load",
22350 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22351
22352 {&hf_hs20_anqp_wan_metrics_uplink_load,
22353 {"Uplink Load", "wlan_mgt.hs20.anqp.wan_metrics.uplink_load",
22354 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22355
22356 {&hf_hs20_anqp_wan_metrics_lmd,
22357 {"LMD", "wlan_mgt.hs20.anqp.wan_metrics.lmd",
22358 FT_UINT16, BASE_DEC, NULL((void*)0), 0, "Load Measurement Duration", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22359
22360 {&hf_hs20_anqp_cc_proto_ip_proto,
22361 {"IP Protocol", "wlan_mgt.hs20.anqp.cc.ip_proto",
22362 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22363 "ProtoPort Tuple - IP Protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22364
22365 {&hf_hs20_anqp_cc_proto_port_num,
22366 {"Port Number", "wlan_mgt.hs20.anqp.cc.port_num",
22367 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
22368 "ProtoPort Tuple - Port Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22369
22370 {&hf_hs20_anqp_cc_proto_status,
22371 {"Status", "wlan_mgt.hs20.anqp.cc.status",
22372 FT_UINT8, BASE_DEC, VALS(hs20_cc_status_vals)(const struct _value_string*)(hs20_cc_status_vals), 0,
22373 "ProtoPort Tuple - Status", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22374
22375 {&hf_hs20_anqp_nai_hrq_count,
22376 {"NAI Home Realm Count", "wlan_mgt.hs20.anqp.nai_hrq.count",
22377 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22378
22379 {&hf_hs20_anqp_nai_hrq_encoding_type,
22380 {"NAI Home Realm Encoding Type",
22381 "wlan_mgt.hs20.anqp.nai_hrq.encoding_type",
22382 FT_UINT8, BASE_DEC, VALS(nai_realm_encoding_vals)(const struct _value_string*)(nai_realm_encoding_vals),
22383 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22384
22385 {&hf_hs20_anqp_nai_hrq_length,
22386 {"NAI Home Realm Name Length", "wlan_mgt.hs20.anqp.nai_hrq.length",
22387 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22388
22389 {&hf_hs20_anqp_nai_hrq_realm_name,
22390 {"NAI Home Realm Name", "wlan_mgt.hs20.anqp.nai_hrq.name",
22391 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22392
22393 {&hf_hs20_anqp_oper_class_indic,
22394 {"Operating Class", "wlan_mgt.hs20.anqp.oper_class_indic.oper_class",
22395 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22396
22397 {&hf_ieee80211_tag,
22398 {"Tag", "wlan_mgt.tag",
22399 FT_NONE, BASE_NONE, 0x0, 0,
22400 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22401
22402 {&hf_ieee80211_tag_number,
22403 {"Tag Number", "wlan_mgt.tag.number",
22404 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x200, &tag_num_vals_ext, 0,
22405 "Element ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22406
22407 {&hf_ieee80211_tag_length,
22408 {"Tag length", "wlan_mgt.tag.length",
22409 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
22410 "Length of tag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22411
22412 {&hf_ieee80211_tag_interpretation,
22413 {"Tag interpretation", "wlan_mgt.tag.interpretation",
22414 FT_STRING, BASE_NONE, NULL((void*)0), 0,
22415 "Interpretation of tag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22416
22417 {&hf_ieee80211_tag_data,
22418 {"Tag Data", "wlan_mgt.tag.data",
22419 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
22420 "Data Interpretation of tag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22421
22422 {&hf_ieee80211_tag_oui,
22423 {"OUI", "wlan_mgt.tag.oui",
22424 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom)((const void *) (gsize) (oui_base_custom)), 0,
22425 "OUI of vendor specific IE", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22426
22427 {&hf_ieee80211_tag_oui_wfa_subtype,
22428 {"WFA Subtype", "wlan_mgt.tag.oui.wfa_subtype",
22429 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22430 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22431
22432 {&hf_ieee80211_tag_ds_param_channel,
22433 {"Current Channel", "wlan_mgt.ds.current_channel",
22434 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22435 "DS Parameter Set - Current Channel", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22436
22437 {&hf_ieee80211_tag_cfp_count,
22438 {"CFP Count", "wlan_mgt.cfp.count",
22439 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22440 "Indicates how many delivery traffic indication messages (DTIMs)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22441
22442 {&hf_ieee80211_tag_cfp_period,
22443 {"CFP Period", "wlan_mgt.cfp.period",
22444 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22445 "Indicates the number of DTIM intervals between the start of CFPs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22446
22447 {&hf_ieee80211_tag_cfp_max_duration,
22448 {"CFP Max Duration", "wlan_mgt.cfp.max_duration",
22449 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
22450 "Indicates the maximum duration (in TU) of the CFP that may be generated by this PCF", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22451
22452 {&hf_ieee80211_tag_cfp_dur_remaining,
22453 {"CFP Dur Remaining", "wlan_mgt.cfp.dur_remaining",
22454 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
22455 "Indicates the maximum time (in TU) remaining in the present CFP", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22456
22457 {&hf_ieee80211_tag_vendor_oui_type,
22458 {"Vendor Specific OUI Type", "wlan_mgt.tag.vendor.oui.type",
22459 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22460 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22461
22462 {&hf_ieee80211_tag_vendor_data,
22463 {"Vendor Specific Data", "wlan_mgt.tag.vendor.data",
22464 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
22465 "Unknown/undecoded Vendor Specific Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22466
22467 {&hf_ieee80211_tim_dtim_count,
22468 {"DTIM count", "wlan_mgt.tim.dtim_count",
22469 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22470 "Indicates how many Beacon frames (including the current frame) appear before the next DTIM", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22471
22472 {&hf_ieee80211_tim_dtim_period,
22473 {"DTIM period", "wlan_mgt.tim.dtim_period",
22474 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22475 "Indicates the number of beacon intervals between successive DTIMs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22476
22477 {&hf_ieee80211_tim_bmapctl,
22478 {"Bitmap control", "wlan_mgt.tim.bmapctl",
22479 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
22480 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22481
22482 {&hf_ieee80211_tim_bmapctl_mcast,
22483 {"Multicast", "wlan_mgt.tim.bmapctl.multicast",
22484 FT_BOOLEAN, 8, NULL((void*)0), 0x1,
22485 "Contains the Traffic Indicator bit associated with Association ID 0", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22486
22487 {&hf_ieee80211_tim_bmapctl_offset,
22488 {"Bitmap Offset", "wlan_mgt.tim.bmapctl.offset",
22489 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFE,
22490 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22491
22492 {&hf_ieee80211_tim_partial_virtual_bitmap,
22493 {"Partial Virtual Bitmap", "wlan_mgt.tim.partial_virtual_bitmap",
22494 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
22495 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22496
22497 {&hf_ieee80211_tim_aid,
22498 {"Association ID", "wlan.tim.aid",
22499 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
22500 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22501
22502 {&hf_ieee80211_tag_ibss_atim_window,
22503 {"Atim Windows", "wlan_mgt.ibss.atim_windows",
22504 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
22505 "Contains the ATIM Window length in TU", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22506
22507 {&hf_ieee80211_tag_country_info_code,
22508 {"Code", "wlan_mgt.country_info.code",
22509 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
22510 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22511
22512 {&hf_ieee80211_tag_country_info_env,
22513 {"Environment", "wlan_mgt.country_info.environment",
22514 FT_UINT8, BASE_HEX, VALS(environment_vals)(const struct _value_string*)(environment_vals), 0x0,
22515 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22516
22517 {&hf_ieee80211_tag_country_info_pad,
22518 {"Padding", "wlan_mgt.country_info.padding",
22519 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
22520 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22521
22522 {&hf_ieee80211_tag_country_info_fnm,
22523 {"Country Info", "wlan_mgt.country_info.fnm",
22524 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
22525 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22526
22527 {&hf_ieee80211_tag_country_info_fnm_fcn,
22528 {"First Channel Number", "wlan_mgt.country_info.fnm.fcn",
22529 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
22530 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22531
22532 {&hf_ieee80211_tag_country_info_fnm_nc,
22533 {"Number of Channels", "wlan_mgt.country_info.fnm.nc",
22534 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
22535 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22536
22537 {&hf_ieee80211_tag_country_info_fnm_mtpl,
22538 {"Maximum Transmit Power Level (in dBm)", "wlan_mgt.country_info.fnm.mtpl",
22539 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
22540 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22541
22542 {&hf_ieee80211_tag_country_info_rrc,
22543 {"Country Info", "wlan_mgt.country_info.rrc",
22544 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
22545 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22546
22547 {&hf_ieee80211_tag_country_info_rrc_oei,
22548 {"Operating Extension Identifier", "wlan_mgt.country_info.rrc.oei",
22549 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
22550 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22551
22552 {&hf_ieee80211_tag_country_info_rrc_oc,
22553 {"Operating Class", "wlan_mgt.country_info.rrc.oc",
22554 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
22555 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22556
22557 {&hf_ieee80211_tag_country_info_rrc_cc,
22558 {"Coverage Class", "wlan_mgt.country_info.rrc.cc",
22559 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
22560 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22561
22562 {&hf_ieee80211_tag_fh_hopping_parameter_prime_radix,
22563 {"Prime Radix", "wlan_mgt.fh_hopping.parameter.prime_radix",
22564 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
22565 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22566
22567 {&hf_ieee80211_tag_fh_hopping_parameter_nb_channels,
22568 {"Number of Channels", "wlan_mgt.fh_hopping.parameter.nb_channels",
22569 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
22570 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22571
22572 {&hf_ieee80211_tag_fh_hopping_table_flag,
22573 {"Flag", "wlan_mgt.fh_hopping.table.flag",
22574 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
22575 "Indicates that a Random Table is present when the value is 1", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22576
22577 {&hf_ieee80211_tag_fh_hopping_table_number_of_sets,
22578 {"Number of Sets", "wlan_mgt.fh_hopping.table.number_of_sets",
22579 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
22580 "Indicates the total number of sets within the hopping patterns", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22581
22582 {&hf_ieee80211_tag_fh_hopping_table_modulus,
22583 {"Modulus", "wlan_mgt.fh_hopping.table.modulus",
22584 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
22585 "Indicate the values to be used in the equations to create a hopping sequence from the Random Table information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22586
22587 {&hf_ieee80211_tag_fh_hopping_table_offset,
22588 {"Offset", "wlan_mgt.fh_hopping.table.offset",
22589 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
22590 "Indicate the values to be used in the equations to create a hopping sequence from the Random Table information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22591
22592 {&hf_ieee80211_tag_fh_hopping_random_table,
22593 {"Random Table", "wlan_mgt.fh_hopping.table.random_table",
22594 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
22595 "It is a vector of single octet values that indicate the random sequence to be followed during a hopping sequence", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22596
22597 {&hf_ieee80211_tag_request,
22598 {"Requested Element ID", "wlan_mgt.tag.request",
22599 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x200, &tag_num_vals_ext, 0,
22600 "The list of elements that are to be included in the responding STA Probe Response frame", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22601
22602 {&hf_ieee80211_tclas_up,
22603 {"User Priority", "wlan_mgt.tclas.user_priority",
22604 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22605 "Contains the value of the UP of the associated MSDUs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22606
22607 {&hf_ieee80211_tclas_class_type,
22608 {"Classifier Type", "wlan_mgt.tclas.class_type",
22609 FT_UINT8, BASE_DEC, VALS(classifier_type)(const struct _value_string*)(classifier_type), 0,
22610 "Specifies the type of classifier parameters", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22611
22612 {&hf_ieee80211_tclas_class_mask,
22613 {"Classifier Mask", "wlan_mgt.tclas.class_mask",
22614 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
22615 "Specifies a bitmap where bits that are set to 1 identify a subset of the classifier parameters", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22616
22617 {&hf_ieee80211_tclas_class_mask0_src_addr,
22618 {"Source Address", "wlan_mgt.tclas.class_mask.src_addr",
22619 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22620
22621 {&hf_ieee80211_tclas_class_mask0_dst_addr,
22622 {"Destination Address", "wlan_mgt.tclas.class_mask.dst_addr",
22623 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22624
22625 {&hf_ieee80211_tclas_class_mask0_type,
22626 {"Type", "wlan_mgt.tclas.class_mask.type",
22627 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22628
22629 {&hf_ieee80211_tclas_class_mask1_ver,
22630 {"Version", "wlan_mgt.tclas.class_mask.version",
22631 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22632
22633 {&hf_ieee80211_tclas_class_mask1_src_ip,
22634 {"Source IP Address", "wlan_mgt.tclas.class_mask.src_ip",
22635 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22636
22637 {&hf_ieee80211_tclas_class_mask1_dst_ip,
22638 {"Destination IP Address", "wlan_mgt.tclas.class_mask.dst_ip",
22639 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22640
22641 {&hf_ieee80211_tclas_class_mask1_src_port,
22642 {"Source Port", "wlan_mgt.tclas.class_mask.src_port",
22643 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22644
22645 {&hf_ieee80211_tclas_class_mask1_dst_port,
22646 {"Destination Port", "wlan_mgt.tclas.class_mask.dst_port",
22647 FT_UINT8, BASE_HEX, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22648
22649 {&hf_ieee80211_tclas_class_mask1_ipv4_dscp,
22650 {"DSCP", "wlan_mgt.tclas.class_mask.dscp",
22651 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22652
22653 {&hf_ieee80211_tclas_class_mask1_ipv4_proto,
22654 {"Protocol", "wlan_mgt.tclas.class_mask.proto",
22655 FT_UINT8, BASE_HEX, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22656
22657 {&hf_ieee80211_tclas_class_mask1_ipv6_flow,
22658 {"Flow Label", "wlan_mgt.tclas.class_mask.flow_label",
22659 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22660
22661 {&hf_ieee80211_tclas_class_mask2_tci,
22662 {"802.1Q CLAN TCI", "wlan_mgt.tclas.class_mask.tci",
22663 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22664
22665 {&hf_ieee80211_tclas_src_mac_addr,
22666 {"Source address", "wlan_mgt.tclas.src_mac_addr",
22667 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
22668 "Classifier Parameters Ethernet Type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22669
22670 {&hf_ieee80211_tclas_dst_mac_addr,
22671 {"Destination address", "wlan_mgt.tclas.dat_mac_addr",
22672 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
22673 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22674
22675 {&hf_ieee80211_tclas_ether_type,
22676 {"Ethernet Type", "wlan_mgt.tclas.ether_type",
22677 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22678 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22679
22680 {&hf_ieee80211_tclas_version,
22681 {"IP Version", "wlan_mgt.tclas.version",
22682 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22683 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22684
22685 {&hf_ieee80211_tclas_ipv4_src,
22686 {"IPv4 Src Addr", "wlan_mgt.tclas.ipv4_src",
22687 FT_IPv4, BASE_NONE, NULL((void*)0), 0,
22688 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22689
22690 {&hf_ieee80211_tclas_ipv4_dst,
22691 {"IPv4 Dst Addr", "wlan_mgt.tclas.ipv4_dst",
22692 FT_IPv4, BASE_NONE, NULL((void*)0), 0,
22693 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22694
22695 {&hf_ieee80211_tclas_src_port,
22696 {"Source Port", "wlan_mgt.tclas.src_port",
22697 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
22698 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22699
22700 {&hf_ieee80211_tclas_dst_port,
22701 {"Destination Port", "wlan_mgt.tclas.dst_port",
22702 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
22703 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22704
22705 {&hf_ieee80211_tclas_dscp,
22706 {"IPv4 DSCP", "wlan_mgt.tclas.dscp",
22707 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
22708 "IPv4 Differentiated Services Code Point (DSCP) Field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22709
22710 {&hf_ieee80211_tclas_protocol,
22711 {"Protocol", "wlan_mgt.tclas.protocol",
22712 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
22713 "IPv4 Protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22714
22715 {&hf_ieee80211_tclas_ipv6_src,
22716 {"IPv6 Src Addr", "wlan_mgt.tclas.ipv6_src",
22717 FT_IPv6, BASE_NONE, NULL((void*)0), 0,
22718 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22719
22720 {&hf_ieee80211_tclas_ipv6_dst,
22721 {"IPv6 Dst Addr", "wlan_mgt.tclas.ipv6_dst",
22722 FT_IPv6, BASE_NONE, NULL((void*)0), 0,
22723 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22724
22725 {&hf_ieee80211_tclas_flow,
22726 {"Flow Label", "wlan_mgt.tclas.flow",
22727 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
22728 "IPv6 Flow Label", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22729
22730 {&hf_ieee80211_tclas_tag_type,
22731 {"802.1Q Tag Type", "wlan_mgt.tclas.tag_type",
22732 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
22733 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22734
22735 {&hf_ieee80211_tag_challenge_text,
22736 {"Challenge Text", "wlan_mgt.tag.challenge_text",
22737 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
22738 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22739
22740 {&hf_ieee80211_rsn_version,
22741 {"RSN Version", "wlan_mgt.rsn.version",
22742 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
22743 "Indicates the version number of the RSNA protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22744
22745 {&hf_ieee80211_rsn_gcs,
22746 {"Group Cipher Suite", "wlan_mgt.rsn.gcs",
22747 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_gcs_base_custom)((const void *) (gsize) (rsn_gcs_base_custom)), 0,
22748 "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22749
22750 {&hf_ieee80211_rsn_gcs_oui,
22751 {"Group Cipher Suite OUI", "wlan_mgt.rsn.gcs.oui",
22752 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom)((const void *) (gsize) (oui_base_custom)), 0,
22753 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22754
22755 {&hf_ieee80211_rsn_gcs_type,
22756 {"Group Cipher Suite type", "wlan_mgt.rsn.gcs.type",
22757 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22758 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22759
22760 {&hf_ieee80211_rsn_gcs_80211_type,
22761 {"Group Cipher Suite type", "wlan_mgt.rsn.gcs.type",
22762 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals)(const struct _value_string*)(ieee80211_rsn_cipher_vals), 0,
22763 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22764
22765 {&hf_ieee80211_rsn_pcs_count,
22766 {"Pairwise Cipher Suite Count", "wlan_mgt.rsn.pcs.count",
22767 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
22768 "Indicates the number of pairwise cipher suite selectors that are contained in the Pairwise Cipher Suite List", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22769
22770 {&hf_ieee80211_rsn_pcs_list,
22771 {"Pairwise Cipher Suite List", "wlan_mgt.rsn.pcs.list",
22772 FT_NONE, BASE_NONE, NULL((void*)0), 0,
22773 "Contains a series of cipher suite selectors that indicate the pairwisecipher suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22774
22775 {&hf_ieee80211_rsn_pcs,
22776 {"Pairwise Cipher Suite", "wlan_mgt.rsn.pcs",
22777 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_pcs_base_custom)((const void *) (gsize) (rsn_pcs_base_custom)), 0,
22778 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22779
22780 {&hf_ieee80211_rsn_pcs_oui,
22781 {"Pairwise Cipher Suite OUI", "wlan_mgt.rsn.pcs.oui",
22782 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom)((const void *) (gsize) (oui_base_custom)), 0,
22783 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22784
22785 {&hf_ieee80211_rsn_pcs_type,
22786 {"Pairwise Cipher Suite type", "wlan_mgt.rsn.pcs.type",
22787 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22788 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22789
22790 {&hf_ieee80211_rsn_pcs_80211_type,
22791 {"Pairwise Cipher Suite type", "wlan_mgt.rsn.pcs.type",
22792 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals)(const struct _value_string*)(ieee80211_rsn_cipher_vals), 0,
22793 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22794
22795 {&hf_ieee80211_rsn_akms_count,
22796 {"Auth Key Management (AKM) Suite Count", "wlan_mgt.rsn.akms.count",
22797 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
22798 "Indicates the number of Auth Key Management suite selectors that are contained in the Auth Key Management Suite List", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22799
22800 {&hf_ieee80211_rsn_akms_list,
22801 {"Auth Key Management (AKM) List", "wlan_mgt.rsn.akms.list",
22802 FT_NONE, BASE_NONE, NULL((void*)0), 0,
22803 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22804
22805 {&hf_ieee80211_rsn_akms,
22806 {"Auth Key Management (AKM) Suite", "wlan_mgt.rsn.akms",
22807 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_akms_base_custom)((const void *) (gsize) (rsn_akms_base_custom)), 0,
22808 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22809
22810 {&hf_ieee80211_rsn_akms_oui,
22811 {"Auth Key Management (AKM) OUI", "wlan_mgt.rsn.akms.oui",
22812 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom)((const void *) (gsize) (oui_base_custom)), 0,
22813 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22814
22815 {&hf_ieee80211_rsn_akms_type,
22816 {"Auth Key Management (AKM) type", "wlan_mgt.rsn.akms.type",
22817 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22818 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22819
22820 {&hf_ieee80211_rsn_akms_80211_type,
22821 {"Auth Key Management (AKM) type", "wlan_mgt.rsn.akms.type",
22822 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_keymgmt_vals)(const struct _value_string*)(ieee80211_rsn_keymgmt_vals), 0,
22823 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22824
22825 {&hf_ieee80211_rsn_cap,
22826 {"RSN Capabilities", "wlan_mgt.rsn.capabilities",
22827 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
22828 "RSN Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22829
22830 {&hf_ieee80211_rsn_cap_preauth,
22831 {"RSN Pre-Auth capabilities", "wlan_mgt.rsn.capabilities.preauth",
22832 FT_BOOLEAN, 16, TFS(&rsn_preauth_flags)(const struct true_false_string*)(&rsn_preauth_flags), 0x0001,
22833 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22834
22835 {&hf_ieee80211_rsn_cap_no_pairwise,
22836 {"RSN No Pairwise capabilities", "wlan_mgt.rsn.capabilities.no_pairwise",
22837 FT_BOOLEAN, 16, TFS(&rsn_no_pairwise_flags)(const struct true_false_string*)(&rsn_no_pairwise_flags), 0x0002,
22838 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22839
22840 {&hf_ieee80211_rsn_cap_ptksa_replay_counter,
22841 {"RSN PTKSA Replay Counter capabilities", "wlan_mgt.rsn.capabilities.ptksa_replay_counter",
22842 FT_UINT16, BASE_HEX, VALS(rsn_cap_replay_counter)(const struct _value_string*)(rsn_cap_replay_counter), 0x000C,
22843 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22844
22845 {&hf_ieee80211_rsn_cap_gtksa_replay_counter,
22846 {"RSN GTKSA Replay Counter capabilities", "wlan_mgt.rsn.capabilities.gtksa_replay_counter",
22847 FT_UINT16, BASE_HEX, VALS(rsn_cap_replay_counter)(const struct _value_string*)(rsn_cap_replay_counter), 0x0030,
22848 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22849
22850 {&hf_ieee80211_rsn_cap_mfpr,
22851 {"Management Frame Protection Required", "wlan_mgt.rsn.capabilities.mfpr",
22852 FT_BOOLEAN, 16, NULL((void*)0), 0x0040,
22853 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22854
22855 {&hf_ieee80211_rsn_cap_mfpc,
22856 {"Management Frame Protection Capable", "wlan_mgt.rsn.capabilities.mfpc",
22857 FT_BOOLEAN, 16, NULL((void*)0), 0x0080,
22858 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22859
22860 {&hf_ieee80211_rsn_cap_jmr,
22861 {"Joint Multi-band RSNA", "wlan_mgt.rsn.capabilities.jmr",
22862 FT_BOOLEAN, 16, NULL((void*)0), 0x0100,
22863 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22864
22865 {&hf_ieee80211_rsn_cap_peerkey,
22866 {"PeerKey Enabled", "wlan_mgt.rsn.capabilities.peerkey",
22867 FT_BOOLEAN, 16, NULL((void*)0), 0x0200,
22868 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22869
22870 {&hf_ieee80211_rsn_pmkid_count,
22871 {"PMKID Count", "wlan_mgt.rsn.pmkid.count",
22872 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
22873 "Indicates the number of PMKID selectors that are contained in the PMKID Suite List", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22874
22875 {&hf_ieee80211_rsn_pmkid_list,
22876 {"PMKID List", "wlan_mgt.rsn.pmkid.list",
22877 FT_NONE, BASE_NONE, NULL((void*)0), 0,
22878 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22879
22880 {&hf_ieee80211_rsn_pmkid,
22881 {"PMKID", "wlan_mgt.pmkid.akms",
22882 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
22883 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22884
22885 {&hf_ieee80211_rsn_gmcs,
22886 {"Group Management Cipher Suite", "wlan_mgt.rsn.gmcs",
22887 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_gmcs_base_custom)((const void *) (gsize) (rsn_gmcs_base_custom)), 0,
22888 "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22889
22890 {&hf_ieee80211_rsn_gmcs_oui,
22891 {"Group Management Cipher Suite OUI", "wlan_mgt.rsn.gmcs.oui",
22892 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom)((const void *) (gsize) (oui_base_custom)), 0,
22893 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22894
22895 {&hf_ieee80211_rsn_gmcs_type,
22896 {"Group Management Cipher Suite type", "wlan_mgt.rsn.gmcs.type",
22897 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
22898 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22899
22900 {&hf_ieee80211_rsn_gmcs_80211_type,
22901 {"Group Management Cipher Suite type", "wlan_mgt.rsn.gmcs.type",
22902 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals)(const struct _value_string*)(ieee80211_rsn_cipher_vals), 0,
22903 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22904
22905 {&hf_ieee80211_ht_pren_type,
22906 {"802.11n (Pre) Type", "wlan_mgt.vs.pren.type",
22907 FT_UINT8, BASE_DEC, VALS(ieee80211_ht_pren_type_vals)(const struct _value_string*)(ieee80211_ht_pren_type_vals), 0,
22908 "Vendor Specific HT Type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22909 {&hf_ieee80211_ht_pren_unknown,
22910 {"802.11n (Pre) Unknown Data", "wlan_mgt.vs.pren.unknown_data",
22911 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
22912 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22913
22914 {&hf_ieee80211_ht_cap,
22915 {"HT Capabilities Info", "wlan_mgt.ht.capabilities",
22916 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
22917 "HT Capabilities information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22918
22919 {&hf_ieee80211_ht_vs_cap,
22920 {"HT Capabilities Info (VS)", "wlan_mgt.vs.ht.capabilities",
22921 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
22922 "Vendor Specific HT Capabilities information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22923
22924 {&hf_ieee80211_ht_ldpc_coding,
22925 {"HT LDPC coding capability", "wlan_mgt.ht.capabilities.ldpccoding",
22926 FT_BOOLEAN, 16, TFS(&ht_ldpc_coding_flag)(const struct true_false_string*)(&ht_ldpc_coding_flag), 0x0001,
22927 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22928
22929 {&hf_ieee80211_ht_chan_width,
22930 {"HT Support channel width", "wlan_mgt.ht.capabilities.width",
22931 FT_BOOLEAN, 16, TFS(&ht_chan_width_flag)(const struct true_false_string*)(&ht_chan_width_flag), 0x0002,
22932 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22933
22934 {&hf_ieee80211_ht_sm_pwsave,
22935 {"HT SM Power Save", "wlan_mgt.ht.capabilities.sm",
22936 FT_UINT16, BASE_HEX, VALS(ht_sm_pwsave_flag)(const struct _value_string*)(ht_sm_pwsave_flag), 0x000c,
22937 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22938
22939 {&hf_ieee80211_ht_green,
22940 {"HT Green Field", "wlan_mgt.ht.capabilities.green",
22941 FT_BOOLEAN, 16, TFS(&ht_green_flag)(const struct true_false_string*)(&ht_green_flag), 0x0010,
22942 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22943
22944 {&hf_ieee80211_ht_short20,
22945 {"HT Short GI for 20MHz", "wlan_mgt.ht.capabilities.short20",
22946 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x0020,
22947 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22948
22949 {&hf_ieee80211_ht_short40,
22950 {"HT Short GI for 40MHz", "wlan_mgt.ht.capabilities.short40",
22951 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x0040,
22952 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22953
22954 {&hf_ieee80211_ht_tx_stbc,
22955 {"HT Tx STBC", "wlan_mgt.ht.capabilities.txstbc",
22956 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x0080,
22957 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22958
22959 {&hf_ieee80211_ht_rx_stbc,
22960 {"HT Rx STBC", "wlan_mgt.ht.capabilities.rxstbc",
22961 FT_UINT16, BASE_HEX, VALS(ht_rx_stbc_flag)(const struct _value_string*)(ht_rx_stbc_flag), 0x0300,
22962 "HT Tx STBC", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22963
22964 {&hf_ieee80211_ht_delayed_block_ack,
22965 {"HT Delayed Block ACK", "wlan_mgt.ht.capabilities.delayedblockack",
22966 FT_BOOLEAN, 16, TFS(&ht_delayed_block_ack_flag)(const struct true_false_string*)(&ht_delayed_block_ack_flag
)
, 0x0400,
22967 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22968
22969 {&hf_ieee80211_ht_max_amsdu,
22970 {"HT Max A-MSDU length", "wlan_mgt.ht.capabilities.amsdu",
22971 FT_BOOLEAN, 16, TFS(&ht_max_amsdu_flag)(const struct true_false_string*)(&ht_max_amsdu_flag), 0x0800,
22972 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22973
22974 {&hf_ieee80211_ht_dss_cck_40,
22975 {"HT DSSS/CCK mode in 40MHz", "wlan_mgt.ht.capabilities.dsscck",
22976 FT_BOOLEAN, 16, TFS(&ht_dss_cck_40_flag)(const struct true_false_string*)(&ht_dss_cck_40_flag), 0x1000,
22977 "HT DSS/CCK mode in 40MHz", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22978
22979 {&hf_ieee80211_ht_psmp,
22980 {"HT PSMP Support", "wlan_mgt.ht.capabilities.psmp",
22981 FT_BOOLEAN, 16, TFS(&ht_psmp_flag)(const struct true_false_string*)(&ht_psmp_flag), 0x2000,
22982 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22983
22984 {&hf_ieee80211_ht_40_mhz_intolerant,
22985 {"HT Forty MHz Intolerant", "wlan_mgt.ht.capabilities.40mhzintolerant",
22986 FT_BOOLEAN, 16, TFS(&ht_40_mhz_intolerant_flag)(const struct true_false_string*)(&ht_40_mhz_intolerant_flag
)
, 0x4000,
22987 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22988
22989 {&hf_ieee80211_ht_l_sig,
22990 {"HT L-SIG TXOP Protection support", "wlan_mgt.ht.capabilities.lsig",
22991 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x8000,
22992 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22993
22994 {&hf_ieee80211_ext_bss_mu_mimo_capable_sta_count,
22995 {"MU-MIMO Capable STA Count", "wlan_mgt.ext_bss.mu_mimo_capable_sta_count",
22996 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
22997 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
22998
22999 {&hf_ieee80211_ext_bss_ss_underutilization,
23000 {"Spatial Stream Underutilization", "wlan_mgt.ext_bss.ss_underutilization",
23001 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
23002 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23003
23004 {&hf_ieee80211_ext_bss_observable_sec_20mhz_utilization,
23005 {"Observable Secondary 20MHz Utilization", "wlan_mgt.ext_bss.observable_sec_20mhz_utilization",
23006 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
23007 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23008
23009 {&hf_ieee80211_ext_bss_observable_sec_40mhz_utilization,
23010 {"Observable Secondary 40MHz Utilization", "wlan_mgt.ext_bss.observable_sec_40mhz_utilization",
23011 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
23012 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23013
23014 {&hf_ieee80211_ext_bss_observable_sec_80mhz_utilization,
23015 {"Observable Secondary 80MHz Utilization", "wlan_mgt.ext_bss.observable_sec_80mhz_utilization",
23016 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
23017 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23018
23019 {&hf_ieee80211_wide_bw_new_channel_width,
23020 {"New Channel Width", "wlan_mgt.wide_bw.new_channel_width",
23021 FT_UINT8, BASE_HEX, VALS(vht_operation_info_channel_width)(const struct _value_string*)(vht_operation_info_channel_width
)
, 0x0,
23022 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23023
23024 {&hf_ieee80211_wide_bw_new_channel_center_freq_segment0,
23025 {"New Channel Center Frequency Segment 0", "wlan_mgt.wide_bw.new_channel_center_freq_segment0",
23026 FT_UINT8, BASE_HEX_DEC, NULL((void*)0), 0x0,
23027 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23028
23029 {&hf_ieee80211_wide_bw_new_channel_center_freq_segment1,
23030 {"New Channel Center Frequency Segment 1", "wlan_mgt.wide_bw.new_channel_center_freq_segment1",
23031 FT_UINT8, BASE_HEX_DEC, NULL((void*)0), 0x0,
23032 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23033
23034 {&hf_ieee80211_operat_notification_mode,
23035 {"Operating Mode Notification", "wlan_mgt.operat_notification_mode",
23036 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
23037 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23038
23039 {&hf_ieee80211_operat_mode_field_channel_width,
23040 {"Channel Width", "wlan_mgt.operat_mode_field.channelwidth",
23041 FT_UINT8, BASE_HEX, VALS(operating_mode_field_channel_width)(const struct _value_string*)(operating_mode_field_channel_width
)
, 0x03,
23042 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23043
23044 {&hf_ieee80211_operat_mode_field_reserved,
23045 {"Reserved", "wlan_mgt.operat_mode_field.reserved",
23046 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0C,
23047 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23048
23049 {&hf_ieee80211_operat_mode_field_rxnss,
23050 {"Rx NSS", "wlan_mgt.operat_mode_field.rxnss",
23051 FT_UINT8, BASE_HEX, VALS(operat_mode_field_rxnss)(const struct _value_string*)(operat_mode_field_rxnss), 0x70,
23052 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23053
23054 {&hf_ieee80211_operat_mode_field_rxnsstype,
23055 {"Rx NSS Type", "wlan_mgt.operat_mode_field.rxnsstype",
23056 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80,
23057 "Indicate that the Rx NSS subfield carries the maximum number of spatial streams that the STA can receive", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23058
23059 {&hf_ieee80211_ampduparam,
23060 {"A-MPDU Parameters", "wlan_mgt.ht.ampduparam",
23061 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
23062 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23063
23064 {&hf_ieee80211_ampduparam_vs,
23065 {"A-MPDU Parameters (VS)", "wlan_mgt.vs.ht.ampduparam",
23066 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
23067 "Vendor Specific A-MPDU Parameters", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23068
23069 {&hf_ieee80211_ampduparam_mpdu,
23070 {"Maximum Rx A-MPDU Length", "wlan_mgt.ht.ampduparam.maxlength",
23071 FT_UINT8, BASE_HEX, 0, 0x03,
23072 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23073
23074 {&hf_ieee80211_ampduparam_mpdu_start_spacing,
23075 {"MPDU Density", "wlan_mgt.ht.ampduparam.mpdudensity",
23076 FT_UINT8, BASE_HEX, VALS(ampduparam_mpdu_start_spacing_flags)(const struct _value_string*)(ampduparam_mpdu_start_spacing_flags
)
, 0x1c,
23077 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23078
23079 {&hf_ieee80211_ampduparam_reserved,
23080 {"Reserved", "wlan_mgt.ht.ampduparam.reserved",
23081 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0,
23082 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23083
23084 {&hf_ieee80211_mcsset,
23085 {"Rx Supported Modulation and Coding Scheme Set", "wlan_mgt.ht.mcsset",
23086 FT_STRING, BASE_NONE, NULL((void*)0), 0,
23087 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23088
23089 {&hf_ieee80211_mcsset_vs,
23090 {"Rx Supported Modulation and Coding Scheme Set (VS)", "wlan_mgt.vs.ht.mcsset",
23091 FT_STRING, BASE_NONE, NULL((void*)0), 0,
23092 "Vendor Specific Rx Supported Modulation and Coding Scheme Set", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23093
23094 {&hf_ieee80211_mcsset_rx_bitmask,
23095 {"Rx Modulation and Coding Scheme (One bit per modulation)", "wlan_mgt.ht.mcsset.rxbitmask",
23096 FT_NONE, BASE_NONE, NULL((void*)0), 0,
23097 "One bit per modulation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23098
23099 {&hf_ieee80211_mcsset_rx_bitmask_0to7,
23100 {"Rx Bitmask Bits 0-7", "wlan_mgt.ht.mcsset.rxbitmask.0to7",
23101 FT_UINT32, BASE_HEX, 0, 0x000000ff,
23102 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23103
23104 {&hf_ieee80211_mcsset_rx_bitmask_8to15,
23105 {"Rx Bitmask Bits 8-15", "wlan_mgt.ht.mcsset.rxbitmask.8to15",
23106 FT_UINT32, BASE_HEX, 0, 0x0000ff00,
23107 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23108
23109 {&hf_ieee80211_mcsset_rx_bitmask_16to23,
23110 {"Rx Bitmask Bits 16-23", "wlan_mgt.ht.mcsset.rxbitmask.16to23",
23111 FT_UINT32, BASE_HEX, 0, 0x00ff0000,
23112 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23113
23114 {&hf_ieee80211_mcsset_rx_bitmask_24to31,
23115 {"Rx Bitmask Bits 24-31", "wlan_mgt.ht.mcsset.rxbitmask.24to31",
23116 FT_UINT32, BASE_HEX, 0, 0xff000000,
23117 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23118
23119 {&hf_ieee80211_mcsset_rx_bitmask_32,
23120 {"Rx Bitmask Bit 32", "wlan_mgt.ht.mcsset.rxbitmask.32",
23121 FT_UINT32, BASE_HEX, 0, 0x000001,
23122 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23123
23124 {&hf_ieee80211_mcsset_rx_bitmask_33to38,
23125 {"Rx Bitmask Bits 33-38", "wlan_mgt.ht.mcsset.rxbitmask.33to38",
23126 FT_UINT32, BASE_HEX, 0, 0x00007e,
23127 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23128
23129 {&hf_ieee80211_mcsset_rx_bitmask_39to52,
23130 {"Rx Bitmask Bits 39-52", "wlan_mgt.ht.mcsset.rxbitmask.39to52",
23131 FT_UINT32, BASE_HEX, 0, 0x1fff80,
23132 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23133
23134 {&hf_ieee80211_mcsset_rx_bitmask_53to76,
23135 {"Rx Bitmask Bits 53-76", "wlan_mgt.ht.mcsset.rxbitmask.53to76",
23136 FT_UINT32, BASE_HEX, 0, 0x1fffffe0,
23137 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23138
23139 {&hf_ieee80211_mcsset_highest_data_rate,
23140 {"Highest Supported Data Rate", "wlan_mgt.ht.mcsset.highestdatarate",
23141 FT_UINT16, BASE_HEX, 0, 0x03ff,
23142 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23143
23144 {&hf_ieee80211_mcsset_tx_mcs_set_defined,
23145 {"Tx Supported MCS Set", "wlan_mgt.ht.mcsset.txsetdefined",
23146 FT_BOOLEAN, 16, TFS(&tfs_defined_not_defined)(const struct true_false_string*)(&tfs_defined_not_defined
)
, 0x0001,
23147 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23148
23149 {&hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal,
23150 {"Tx and Rx MCS Set", "wlan_mgt.ht.mcsset.txrxmcsnotequal",
23151 FT_BOOLEAN, 16, TFS(&mcsset_tx_rx_mcs_set_not_equal_flag)(const struct true_false_string*)(&mcsset_tx_rx_mcs_set_not_equal_flag
)
, 0x0002,
23152 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23153
23154 {&hf_ieee80211_mcsset_tx_max_spatial_streams,
23155 {"Maximum Number of Tx Spatial Streams Supported", "wlan_mgt.ht.mcsset.txmaxss",
23156 FT_UINT16, BASE_HEX, 0 , 0x000c,
23157 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23158
23159 {&hf_ieee80211_mcsset_tx_unequal_modulation,
23160 {"Unequal Modulation", "wlan_mgt.ht.mcsset.txunequalmod",
23161 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x0010,
23162 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23163
23164 {&hf_ieee80211_htex_cap,
23165 {"HT Extended Capabilities", "wlan_mgt.htex.capabilities",
23166 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
23167 "HT Extended Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23168
23169 {&hf_ieee80211_htex_vs_cap,
23170 {"HT Extended Capabilities (VS)", "wlan_mgt.vs.htex.capabilities",
23171 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
23172 "Vendor Specific HT Extended Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23173
23174 {&hf_ieee80211_htex_pco,
23175 {"Transmitter supports PCO", "wlan_mgt.htex.capabilities.pco",
23176 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x0001,
23177 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23178
23179 {&hf_ieee80211_htex_transtime,
23180 {"Time needed to transition between 20MHz and 40MHz", "wlan_mgt.htex.capabilities.transtime",
23181 FT_UINT16, BASE_HEX, VALS(htex_transtime_flags)(const struct _value_string*)(htex_transtime_flags), 0x0006,
23182 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23183
23184 {&hf_ieee80211_htex_mcs,
23185 {"MCS Feedback capability", "wlan_mgt.htex.capabilities.mcs",
23186 FT_UINT16, BASE_HEX, VALS(htex_mcs_flags)(const struct _value_string*)(htex_mcs_flags), 0x0300,
23187 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23188
23189 {&hf_ieee80211_htex_htc_support,
23190 {"High Throughput", "wlan_mgt.htex.capabilities.htc",
23191 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x0400,
23192 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23193
23194 {&hf_ieee80211_htex_rd_responder,
23195 {"Reverse Direction Responder", "wlan_mgt.htex.capabilities.rdresponder",
23196 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x0800,
23197 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23198
23199 {&hf_ieee80211_txbf,
23200 {"Transmit Beam Forming (TxBF) Capabilities", "wlan_mgt.txbf",
23201 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
23202 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23203
23204 {&hf_ieee80211_txbf_vs,
23205 {"Transmit Beam Forming (TxBF) Capabilities (VS)", "wlan_mgt.vs.txbf",
23206 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
23207 "Vendor Specific Transmit Beam Forming (TxBF) Capabilities", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23208
23209 {&hf_ieee80211_txbf_cap,
23210 {"Transmit Beamforming", "wlan_mgt.txbf.txbf",
23211 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x00000001,
23212 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23213
23214 {&hf_ieee80211_txbf_rcv_ssc,
23215 {"Receive Staggered Sounding", "wlan_mgt.txbf.rxss",
23216 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x00000002,
23217 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23218
23219 {&hf_ieee80211_txbf_tx_ssc,
23220 {"Transmit Staggered Sounding", "wlan_mgt.txbf.txss",
23221 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x00000004,
23222 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23223
23224 {&hf_ieee80211_txbf_rcv_ndp,
23225 {"Receive Null Data packet (NDP)", "wlan_mgt.txbf.rxndp",
23226 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x00000008,
23227 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23228
23229 {&hf_ieee80211_txbf_tx_ndp,
23230 {"Transmit Null Data packet (NDP)", "wlan_mgt.txbf.txndp",
23231 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x00000010,
23232 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23233
23234 {&hf_ieee80211_txbf_impl_txbf,
23235 {"Implicit TxBF capable", "wlan_mgt.txbf.impltxbf",
23236 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x00000020,
23237 "Implicit Transmit Beamforming (TxBF) capable", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23238
23239 {&hf_ieee80211_txbf_calib,
23240 {"Calibration", "wlan_mgt.txbf.calibration",
23241 FT_UINT32, BASE_HEX, VALS(txbf_calib_flag)(const struct _value_string*)(txbf_calib_flag), 0x000000c0,
23242 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23243
23244 {&hf_ieee80211_txbf_expl_csi,
23245 {"STA can apply TxBF using CSI explicit feedback", "wlan_mgt.txbf.csi",
23246 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x00000100,
23247 "Station can apply TxBF using CSI explicit feedback", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23248
23249 {&hf_ieee80211_txbf_expl_uncomp_fm,
23250 {"STA can apply TxBF using uncompressed beamforming feedback matrix", "wlan_mgt.txbf.fm.uncompressed.tbf",
23251 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x00000200,
23252 "Station can apply TxBF using uncompressed beamforming feedback matrix", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23253
23254 {&hf_ieee80211_txbf_expl_comp_fm,
23255 {"STA can apply TxBF using compressed beamforming feedback matrix", "wlan_mgt.txbf.fm.compressed.tbf",
23256 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x00000400,
23257 "Station can apply TxBF using compressed beamforming feedback matrix", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23258
23259 {&hf_ieee80211_txbf_expl_bf_csi,
23260 {"Receiver can return explicit CSI feedback", "wlan_mgt.txbf.rcsi",
23261 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags)(const struct _value_string*)(txbf_feedback_flags), 0x00001800,
23262 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23263
23264 {&hf_ieee80211_txbf_expl_uncomp_fm_feed,
23265 {"Receiver can return explicit uncompressed Beamforming Feedback Matrix", "wlan_mgt.txbf.fm.uncompressed.rbf",
23266 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags)(const struct _value_string*)(txbf_feedback_flags), 0x00006000,
23267 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23268
23269 {&hf_ieee80211_txbf_expl_comp_fm_feed,
23270 {"STA can compress and use compressed Beamforming Feedback Matrix", "wlan_mgt.txbf.fm.compressed.bf",
23271 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags)(const struct _value_string*)(txbf_feedback_flags), 0x00018000,
23272 "Station can compress and use compressed Beamforming Feedback Matrix", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23273
23274 {&hf_ieee80211_txbf_min_group,
23275 {"Minimal grouping used for explicit feedback reports", "wlan_mgt.txbf.mingroup",
23276 FT_UINT32, BASE_HEX, VALS(txbf_min_group_flags)(const struct _value_string*)(txbf_min_group_flags), 0x00060000,
23277 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23278
23279 {&hf_ieee80211_vht_cap,
23280 {"VHT Capabilities Info", "wlan_mgt.vht.capabilities",
23281 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
23282 "VHT Capabilities information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23283
23284 {&hf_ieee80211_vht_max_mpdu_length,
23285 {"Maximum MPDU Length", "wlan_mgt.vht.capabilities.maxmpdulength",
23286 FT_UINT32, BASE_HEX, VALS(vht_max_mpdu_length_flag)(const struct _value_string*)(vht_max_mpdu_length_flag), 0x00000003,
23287 "In Octets unit", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23288
23289 {&hf_ieee80211_vht_supported_chan_width_set,
23290 {"Supported Channel Width Set", "wlan_mgt.vht.capabilities.supportedchanwidthset",
23291 FT_UINT32, BASE_HEX, VALS(vht_supported_chan_width_set_flag)(const struct _value_string*)(vht_supported_chan_width_set_flag
)
, 0x0000000c,
23292 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23293
23294 {&hf_ieee80211_vht_rx_ldpc,
23295 {"Rx LDPC", "wlan_mgt.vht.capabilities.rxldpc",
23296 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x00000010,
23297 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23298
23299 {&hf_ieee80211_vht_short_gi_for_80,
23300 {"Short GI for 80MHz", "wlan_mgt.vht.capabilities.short80",
23301 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x00000020,
23302 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23303
23304 {&hf_ieee80211_vht_short_gi_for_160,
23305 {"Short GI for 160MHz and 80+80MHz", "wlan_mgt.vht.capabilities.short160",
23306 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x00000040,
23307 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23308
23309 {&hf_ieee80211_vht_tx_stbc,
23310 {"Tx STBC", "wlan_mgt.vht.capabilities.txstbc",
23311 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x00000080,
23312 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23313
23314 {&hf_ieee80211_vht_rx_stbc,
23315 {"Rx STBC", "wlan_mgt.vht.capabilities.rxstbc",
23316 FT_UINT32, BASE_HEX, VALS(vht_rx_stbc_flag)(const struct _value_string*)(vht_rx_stbc_flag), 0x00000700,
23317 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23318
23319 {&hf_ieee80211_vht_su_beamformer_cap,
23320 {"SU Beam-former Capable", "wlan_mgt.vht.capabilities.subeamformer",
23321 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x00000800,
23322 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23323
23324 {&hf_ieee80211_vht_su_beamformee_cap,
23325 {"SU Beam-formee Capable", "wlan_mgt.vht.capabilities.subeamformee",
23326 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x00001000,
23327 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23328
23329 {&hf_ieee80211_vht_beamformer_antennas,
23330 {"Compressed Steering Number of Beamformer Antennas Supported", "wlan_mgt.vht.capabilities.beamformerants",
23331 FT_UINT32, BASE_HEX, VALS(num_plus_one_3bit_flag)(const struct _value_string*)(num_plus_one_3bit_flag), 0x0000e000,
23332 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23333
23334 {&hf_ieee80211_vht_sounding_dimensions,
23335 {"Number of Sounding Dimensions", "wlan_mgt.vht.capabilities.soundingdimensions",
23336 FT_UINT32, BASE_HEX, VALS(num_plus_one_3bit_flag)(const struct _value_string*)(num_plus_one_3bit_flag), 0x00070000,
23337 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23338
23339 {&hf_ieee80211_vht_mu_beamformer_cap,
23340 {"MU Beam-former Capable", "wlan_mgt.vht.capabilities.mubeamformer",
23341 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x00080000,
23342 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23343
23344 {&hf_ieee80211_vht_mu_beamformee_cap,
23345 {"MU Beam-formee Capable", "wlan_mgt.vht.capabilities.mubeamformee",
23346 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x00100000,
23347 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23348
23349 {&hf_ieee80211_vht_txop_ps,
23350 {"VHT TXOP PS", "wlan_mgt.vht.capabilities.vhttxopps",
23351 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x00200000,
23352 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23353
23354 {&hf_ieee80211_vht_var_htc_field,
23355 {"+HTC-VHT Capable (VHT variant HT Control field)", "wlan_mgt.vht.capabilities.vhthtc",
23356 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x00400000,
23357 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23358
23359 {&hf_ieee80211_vht_max_ampdu,
23360 {"Max A-MPDU Length", "wlan_mgt.vht.capabilities.maxampdu",
23361 FT_UINT32, BASE_HEX, VALS(vht_max_ampdu_flag)(const struct _value_string*)(vht_max_ampdu_flag), 0x03800000,
23362 "In Octets unit", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23363
23364 {&hf_ieee80211_vht_link_adaptation_cap,
23365 {"VHT Link Adaptation", "wlan_mgt.vht.capabilities.linkadapt",
23366 FT_UINT32, BASE_HEX, VALS(vht_link_adapt_flag)(const struct _value_string*)(vht_link_adapt_flag), 0x0c000000,
23367 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23368
23369 {&hf_ieee80211_vht_rx_pattern,
23370 {"Rx Antenna Pattern Consistency", "wlan_mgt.vht.capabilities.rxpatconsist",
23371 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x10000000,
23372 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23373
23374 {&hf_ieee80211_vht_tx_pattern,
23375 {"Tx Antenna Pattern Consistency", "wlan_mgt.vht.capabilities.txpatconsist",
23376 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x20000000,
23377 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23378
23379 {&hf_ieee80211_vht_reserv,
23380 {"Reserved", "wlan_mgt.vht.reserved",
23381 FT_BOOLEAN, 32, NULL((void*)0), 0xc0000000,
23382 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23383
23384 {&hf_ieee80211_vht_mcsset,
23385 {"VHT Supported MCS Set", "wlan_mgt.vht.mcsset",
23386 FT_NONE, BASE_NONE, NULL((void*)0), 0,
23387 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23388
23389 {&hf_ieee80211_vht_mcsset_rx_mcs_map,
23390 {"Rx MCS Map", "wlan_mgt.vht.mcsset.rxmcsmap",
23391 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
23392 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23393
23394 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss,
23395 {"Rx 1 SS", "wlan_mgt.vht.mcsset.rxmcsmap.ss1",
23396 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0x0003,
23397 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23398
23399 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss,
23400 {"Rx 2 SS", "wlan_mgt.vht.mcsset.rxmcsmap.ss2",
23401 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0x000c,
23402 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23403
23404 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss,
23405 {"Rx 3 SS", "wlan_mgt.vht.mcsset.rxmcsmap.ss3",
23406 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0x0030,
23407 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23408
23409 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss,
23410 {"Rx 4 SS", "wlan_mgt.vht.mcsset.rxmcsmap.ss4",
23411 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0x00c0,
23412 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23413
23414 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss,
23415 {"Rx 5 SS", "wlan_mgt.vht.mcsset.rxmcsmap.ss5",
23416 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0x0300,
23417 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23418
23419 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss,
23420 {"Rx 6 SS", "wlan_mgt.vht.mcsset.rxmcsmap.ss6",
23421 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0x0c00,
23422 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23423
23424 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss,
23425 {"Rx 7 SS", "wlan_mgt.vht.mcsset.rxmcsmap.ss7",
23426 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0x3000,
23427 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23428
23429 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss,
23430 {"Rx 8 SS", "wlan_mgt.vht.mcsset.rxmcsmap.ss8",
23431 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0xc000,
23432 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23433
23434 {&hf_ieee80211_vht_mcsset_rx_highest_long_gi,
23435 {"Rx Highest Long GI Data Rate (in Mb/s, 0 = subfield not in use)", "wlan_mgt.vht.mcsset.rxhighestlonggirate",
23436 FT_UINT16, BASE_HEX, NULL((void*)0), 0x1fff,
23437 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23438
23439 {&hf_ieee80211_vht_mcsset_tx_mcs_map,
23440 {"Tx MCS Map", "wlan_mgt.vht.mcsset.txmcsmap",
23441 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
23442 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23443
23444 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss,
23445 {"Tx 1 SS", "wlan_mgt.vht.mcsset.txmcsmap.ss1",
23446 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0x0003,
23447 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23448
23449 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss,
23450 {"Tx 2 SS", "wlan_mgt.vht.mcsset.txmcsmap.ss2",
23451 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0x000c,
23452 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23453
23454 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss,
23455 {"Tx 3 SS", "wlan_mgt.vht.mcsset.txmcsmap.ss3",
23456 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0x0030,
23457 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23458
23459 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss,
23460 {"Tx 4 SS", "wlan_mgt.vht.mcsset.txmcsmap.ss4",
23461 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0x00c0,
23462 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23463
23464 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss,
23465 {"Tx 5 SS", "wlan_mgt.vht.mcsset.txmcsmap.ss5",
23466 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0x0300,
23467 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23468
23469 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss,
23470 {"Tx 6 SS", "wlan_mgt.vht.mcsset.txmcsmap.ss6",
23471 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0x0c00,
23472 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23473
23474 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss,
23475 {"Tx 7 SS", "wlan_mgt.vht.mcsset.txmcsmap.ss7",
23476 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0x3000,
23477 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23478
23479 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss,
23480 {"Tx 8 SS", "wlan_mgt.vht.mcsset.txmcsmap.ss8",
23481 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0xc000,
23482 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23483
23484 {&hf_ieee80211_vht_mcsset_tx_highest_long_gi,
23485 {"Tx Highest Long GI Data Rate (in Mb/s, 0 = subfield not in use)", "wlan_mgt.vht.mcsset.txhighestlonggirate",
23486 FT_UINT16, BASE_HEX, NULL((void*)0), 0x1fff,
23487 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23488
23489 {&hf_ieee80211_vht_op,
23490 {"VHT Operation Info", "wlan_mgt.vht.op",
23491 FT_NONE, BASE_NONE, NULL((void*)0), 0,
23492 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23493
23494 {&hf_ieee80211_vht_op_channel_width,
23495 {"Channel Width", "wlan_mgt.vht.op.channelwidth",
23496 FT_UINT8, BASE_HEX, VALS(vht_op_channel_width_flag)(const struct _value_string*)(vht_op_channel_width_flag), 0,
23497 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23498
23499 {&hf_ieee80211_vht_op_channel_center0,
23500 {"Channel Center Segment 0", "wlan_mgt.vht.op.channelcenter0",
23501 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
23502 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23503
23504 {&hf_ieee80211_vht_op_channel_center1,
23505 {"Channel Center Segment 1", "wlan_mgt.vht.op.channelcenter1",
23506 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
23507 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23508
23509 {&hf_ieee80211_vht_op_basic_mcs_map,
23510 {"Basic MCS Map", "wlan_mgt.vht.op.basicmcsmap",
23511 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
23512 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23513
23514 {&hf_ieee80211_vht_op_max_basic_mcs_for_1_ss,
23515 {"Basic 1 SS", "wlan_mgt.vht.op.basicmcsmap.ss1",
23516 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0x0003,
23517 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23518
23519 {&hf_ieee80211_vht_op_max_basic_mcs_for_2_ss,
23520 {"Basic 2 SS", "wlan_mgt.vht.op.basicmcsmap.ss2",
23521 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0x000c,
23522 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23523
23524 {&hf_ieee80211_vht_op_max_basic_mcs_for_3_ss,
23525 {"Basic 3 SS", "wlan_mgt.vht.op.basicmcsmap.ss3",
23526 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0x0030,
23527 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23528
23529 {&hf_ieee80211_vht_op_max_basic_mcs_for_4_ss,
23530 {"Basic 4 SS", "wlan_mgt.vht.op.basicmcsmap.ss4",
23531 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0x00c0,
23532 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23533
23534 {&hf_ieee80211_vht_op_max_basic_mcs_for_5_ss,
23535 {"Basic 5 SS", "wlan_mgt.vht.op.basicmcsmap.ss5",
23536 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0x0300,
23537 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23538
23539 {&hf_ieee80211_vht_op_max_basic_mcs_for_6_ss,
23540 {"Basic 6 SS", "wlan_mgt.vht.op.basicmcsmap.ss6",
23541 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0x0c00,
23542 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23543
23544 {&hf_ieee80211_vht_op_max_basic_mcs_for_7_ss,
23545 {"Basic 7 SS", "wlan_mgt.vht.op.basicmcsmap.ss7",
23546 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0x3000,
23547 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23548
23549 {&hf_ieee80211_vht_op_max_basic_mcs_for_8_ss,
23550 {"Basic 8 SS", "wlan_mgt.vht.op.basicmcsmap.ss8",
23551 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)(const struct _value_string*)(vht_supported_mcs_flag), 0xc000,
23552 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23553
23554 {&hf_ieee80211_vht_tpe_pwr_info,
23555 {"Tx Pwr Info", "wlan_mgt.vht.tpe.pwr_info",
23556 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
23557 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23558
23559 {&hf_ieee80211_vht_tpe_pwr_info_count,
23560 {"Max Tx Pwr Count", "wlan_mgt.vht.tpe.pwr_info.count",
23561 FT_UINT8, BASE_DEC, NULL((void*)0) , 0x07,
23562 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23563
23564 {&hf_ieee80211_vht_tpe_pwr_info_unit,
23565 {"Max Tx Pwr Unit Interpretation", "wlan_mgt.vht.tpe.pwr_info.unit",
23566 FT_UINT8, BASE_DEC, VALS(vht_tpe_pwr_units)(const struct _value_string*)(vht_tpe_pwr_units) , 0x38,
23567 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23568
23569 {&hf_ieee80211_vht_tpe_pwr_info_reserved,
23570 {"Reserved", "wlan_mgt.vht.tpe.pwr_info.reserved",
23571 FT_UINT8, BASE_DEC, NULL((void*)0) , 0xC0,
23572 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23573
23574 {&hf_ieee80211_vht_tpe_pwr_constr_20,
23575 {"Local Max Tx Pwr Constraint 20MHz", "wlan_mgt.vht.tpe.pwr_constr_20",
23576 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (gsize) (vht_tpe_custom)), 0,
23577 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23578
23579 {&hf_ieee80211_vht_tpe_pwr_constr_40,
23580 {"Local Max Tx Pwr Constraint 40MHz", "wlan_mgt.vht.tpe.pwr_constr_40",
23581 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (gsize) (vht_tpe_custom)), 0,
23582 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23583
23584 {&hf_ieee80211_vht_tpe_pwr_constr_80,
23585 {"Local Max Tx Pwr Constraint 80MHz", "wlan_mgt.vht.tpe.pwr_constr_80",
23586 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (gsize) (vht_tpe_custom)), 0,
23587 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23588
23589 {&hf_ieee80211_vht_tpe_pwr_constr_160,
23590 {"Local Max Tx Pwr Constraint 160MHz/80+80 MHz", "wlan_mgt.vht.tpe.pwr_constr_160",
23591 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (gsize) (vht_tpe_custom)), 0,
23592 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23593
23594 {&hf_ieee80211_txbf_csi_num_bf_ant,
23595 {"Max antennae STA can support when CSI feedback required", "wlan_mgt.txbf.csinumant",
23596 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags)(const struct _value_string*)(txbf_antenna_flags), 0x00180000,
23597 "Max antennae station can support when CSI feedback required", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23598
23599 {&hf_ieee80211_txbf_uncomp_sm_bf_ant,
23600 {"Max antennae STA can support when uncompressed Beamforming feedback required", "wlan_mgt.txbf.fm.uncompressed.maxant",
23601 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags)(const struct _value_string*)(txbf_antenna_flags), 0x00600000,
23602 "Max antennae station can support when uncompressed Beamforming feedback required", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23603
23604 {&hf_ieee80211_txbf_comp_sm_bf_ant,
23605 {"Max antennae STA can support when compressed Beamforming feedback required", "wlan_mgt.txbf.fm.compressed.maxant",
23606 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags)(const struct _value_string*)(txbf_antenna_flags), 0x01800000,
23607 "Max antennae station can support when compressed Beamforming feedback required", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23608
23609 {&hf_ieee80211_txbf_csi_max_rows_bf,
23610 {"Maximum number of rows of CSI explicit feedback", "wlan_mgt.txbf.csi.maxrows",
23611 FT_UINT32, BASE_HEX, VALS(txbf_csi_max_rows_bf_flags)(const struct _value_string*)(txbf_csi_max_rows_bf_flags), 0x06000000,
23612 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23613
23614 {&hf_ieee80211_txbf_chan_est,
23615 {"Maximum number of space time streams for which channel dimensions can be simultaneously estimated", "wlan_mgt.txbf.channelest",
23616 FT_UINT32, BASE_HEX, VALS(txbf_chan_est_flags)(const struct _value_string*)(txbf_chan_est_flags), 0x18000000,
23617 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23618
23619 {&hf_ieee80211_txbf_resrv,
23620 {"Reserved", "wlan_mgt.txbf.reserved",
23621 FT_UINT32, BASE_HEX, NULL((void*)0), 0xe0000000,
23622 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23623
23624 {&hf_ieee80211_hta_cc,
23625 {"HT Control Channel", "wlan_mgt.hta.control_channel",
23626 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
23627 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23628
23629 {&hf_ieee80211_hta_cap,
23630 {"HT Additional Capabilities", "wlan_mgt.hta.capabilities",
23631 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
23632 "HT Additional Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23633
23634 {&hf_ieee80211_hta_ext_chan_offset,
23635 {"Extension Channel Offset", "wlan_mgt.hta.capabilities.ext_chan_offset",
23636 FT_UINT16, BASE_HEX, VALS(hta_ext_chan_offset_flag)(const struct _value_string*)(hta_ext_chan_offset_flag), 0x0003,
23637 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23638
23639 {&hf_ieee80211_hta_rec_tx_width,
23640 {"Recommended Tx Channel Width", "wlan_mgt.hta.capabilities.rec_tx_width",
23641 FT_BOOLEAN, 16, TFS(&hta_rec_tx_width_flag)(const struct true_false_string*)(&hta_rec_tx_width_flag), 0x0004,
23642 "Recommended Transmit Channel Width", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23643
23644 {&hf_ieee80211_hta_rifs_mode,
23645 {"Reduced Interframe Spacing (RIFS) Mode", "wlan_mgt.hta.capabilities.rifs_mode",
23646 FT_BOOLEAN, 16, TFS(&hta_rifs_mode_flag)(const struct true_false_string*)(&hta_rifs_mode_flag), 0x0008,
23647 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23648
23649 {&hf_ieee80211_hta_controlled_access,
23650 {"Controlled Access Only", "wlan_mgt.hta.capabilities.controlled_access",
23651 FT_BOOLEAN, 16, TFS(&hta_controlled_access_flag)(const struct true_false_string*)(&hta_controlled_access_flag
)
, 0x0010,
23652 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23653
23654 {&hf_ieee80211_hta_service_interval,
23655 {"Service Interval Granularity", "wlan_mgt.hta.capabilities.service_interval",
23656 FT_UINT16, BASE_HEX, VALS(hta_service_interval_flag)(const struct _value_string*)(hta_service_interval_flag), 0x00E0,
23657 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23658
23659 {&hf_ieee80211_hta_operating_mode,
23660 {"Operating Mode", "wlan_mgt.hta.capabilities.operating_mode",
23661 FT_UINT16, BASE_HEX, VALS(hta_operating_mode_flag)(const struct _value_string*)(hta_operating_mode_flag), 0x0003,
23662 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23663
23664 {&hf_ieee80211_hta_non_gf_devices,
23665 {"Non Greenfield (GF) devices Present", "wlan_mgt.hta.capabilities.non_gf_devices",
23666 FT_BOOLEAN, 16, TFS(&hta_non_gf_devices_flag)(const struct true_false_string*)(&hta_non_gf_devices_flag
)
, 0x0004,
23667 "on Greenfield (GF) devices Present", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23668
23669 {&hf_ieee80211_hta_basic_stbc_mcs,
23670 {"Basic STB Modulation and Coding Scheme (MCS)", "wlan_mgt.hta.capabilities.basic_stbc_mcs",
23671 FT_UINT16, BASE_HEX, NULL((void*)0) , 0x007f,
23672 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23673
23674 {&hf_ieee80211_hta_dual_stbc_protection,
23675 {"Dual Clear To Send (CTS) Protection", "wlan_mgt.hta.capabilities.dual_stbc_protection",
23676 FT_BOOLEAN, 16, TFS(&hta_dual_stbc_protection_flag)(const struct true_false_string*)(&hta_dual_stbc_protection_flag
)
, 0x0080,
23677 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23678
23679 {&hf_ieee80211_hta_secondary_beacon,
23680 {"Secondary Beacon", "wlan_mgt.hta.capabilities.secondary_beacon",
23681 FT_BOOLEAN, 16, TFS(&hta_secondary_beacon_flag)(const struct true_false_string*)(&hta_secondary_beacon_flag
)
, 0x0100,
23682 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23683
23684 {&hf_ieee80211_hta_lsig_txop_protection,
23685 {"L-SIG TXOP Protection Support", "wlan_mgt.hta.capabilities.lsig_txop_protection",
23686 FT_BOOLEAN, 16, TFS(&hta_lsig_txop_protection_flag)(const struct true_false_string*)(&hta_lsig_txop_protection_flag
)
, 0x0200,
23687 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23688
23689 {&hf_ieee80211_hta_pco_active,
23690 {"Phased Coexistence Operation (PCO) Active", "wlan_mgt.hta.capabilities.pco_active",
23691 FT_BOOLEAN, 16, TFS(&hta_pco_active_flag)(const struct true_false_string*)(&hta_pco_active_flag), 0x0400,
23692 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23693
23694 {&hf_ieee80211_hta_pco_phase,
23695 {"Phased Coexistence Operation (PCO) Phase", "wlan_mgt.hta.capabilities.pco_phase",
23696 FT_BOOLEAN, 16, TFS(&hta_pco_phase_flag)(const struct true_false_string*)(&hta_pco_phase_flag), 0x0800,
23697 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23698
23699 {&hf_ieee80211_antsel,
23700 {"Antenna Selection (ASEL) Capabilities", "wlan_mgt.asel",
23701 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
23702 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23703
23704 {&hf_ieee80211_antsel_vs,
23705 {"Antenna Selection (ASEL) Capabilities (VS)", "wlan_mgt.vs.asel",
23706 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
23707 "Vendor Specific Antenna Selection (ASEL) Capabilities", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23708
23709 {&hf_ieee80211_antsel_b0,
23710 {"Antenna Selection Capable", "wlan_mgt.asel.capable",
23711 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x01,
23712 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23713
23714 {&hf_ieee80211_antsel_b1,
23715 {"Explicit CSI Feedback Based Tx ASEL", "wlan_mgt.asel.txcsi",
23716 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x02,
23717 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23718
23719 {&hf_ieee80211_antsel_b2,
23720 {"Antenna Indices Feedback Based Tx ASEL", "wlan_mgt.asel.txif",
23721 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x04,
23722 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23723
23724 {&hf_ieee80211_antsel_b3,
23725 {"Explicit CSI Feedback", "wlan_mgt.asel.csi",
23726 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x08,
23727 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23728
23729 {&hf_ieee80211_antsel_b4,
23730 {"Antenna Indices Feedback", "wlan_mgt.asel.if",
23731 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x10,
23732 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23733
23734 {&hf_ieee80211_antsel_b5,
23735 {"Rx ASEL", "wlan_mgt.asel.rx",
23736 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x20,
23737 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23738
23739 {&hf_ieee80211_antsel_b6,
23740 {"Tx Sounding PPDUs", "wlan_mgt.asel.sppdu",
23741 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x40,
23742 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23743
23744 {&hf_ieee80211_antsel_b7,
23745 {"Reserved", "wlan_mgt.asel.reserved",
23746 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80,
23747 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23748
23749 {&hf_ieee80211_ht_info_delimiter1,
23750 {"HT Information Subset (1 of 3)", "wlan_mgt.ht.info.delim1",
23751 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
23752 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23753
23754 {&hf_ieee80211_ht_info_primary_channel,
23755 {"Primary Channel", "wlan_mgt.ht.info.primarychannel",
23756 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
23757 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23758
23759 {&hf_ieee80211_ht_info_secondary_channel_offset,
23760 {"Secondary channel offset", "wlan_mgt.ht.info.secchanoffset",
23761 FT_UINT8, BASE_HEX, VALS(ht_info_secondary_channel_offset_flags)(const struct _value_string*)(ht_info_secondary_channel_offset_flags
)
, 0x03,
23762 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23763
23764 {&hf_ieee80211_ht_info_channel_width,
23765 {"Supported channel width", "wlan_mgt.ht.info.chanwidth",
23766 FT_BOOLEAN, 8, TFS(&ht_info_channel_width_flag)(const struct true_false_string*)(&ht_info_channel_width_flag
)
, 0x04,
23767 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23768
23769 {&hf_ieee80211_ht_info_rifs_mode,
23770 {"Reduced Interframe Spacing (RIFS)", "wlan_mgt.ht.info.rifs",
23771 FT_BOOLEAN, 8, TFS(&ht_info_rifs_mode_flag)(const struct true_false_string*)(&ht_info_rifs_mode_flag
)
, 0x08,
23772 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23773
23774 {&hf_ieee80211_ht_info_psmp_stas_only,
23775 {"Power Save Multi-Poll (PSMP) stations only", "wlan_mgt.ht.info.psmponly",
23776 FT_BOOLEAN, 8, TFS(&ht_info_psmp_stas_only_flag)(const struct true_false_string*)(&ht_info_psmp_stas_only_flag
)
, 0x10,
23777 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23778
23779 {&hf_ieee80211_ht_info_service_interval_granularity,
23780 {"Shortest service interval", "wlan_mgt.ht.info",
23781 FT_UINT8, BASE_HEX, VALS(ht_info_service_interval_granularity_flags)(const struct _value_string*)(ht_info_service_interval_granularity_flags
)
, 0xe0,
23782 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23783
23784 {&hf_ieee80211_ht_info_delimiter2,
23785 {"HT Information Subset (2 of 3)", "wlan_mgt.ht.info.delim2",
23786 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
23787 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23788
23789 {&hf_ieee80211_ht_info_operating_mode,
23790 {"Operating mode of BSS", "wlan_mgt.ht.info.operatingmode",
23791 FT_UINT16, BASE_HEX, VALS(ht_info_operating_mode_flags)(const struct _value_string*)(ht_info_operating_mode_flags), 0x0003,
23792 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23793
23794 {&hf_ieee80211_ht_info_non_greenfield_sta_present,
23795 {"Non-greenfield STAs present", "wlan_mgt.ht.info.greenfield",
23796 FT_BOOLEAN, 16, TFS(&ht_info_non_greenfield_sta_present_flag)(const struct true_false_string*)(&ht_info_non_greenfield_sta_present_flag
)
, 0x0004,
23797 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23798
23799 {&hf_ieee80211_ht_info_transmit_burst_limit,
23800 {"Transmit burst limit", "wlan_mgt.ht.info.burstlim",
23801 FT_BOOLEAN, 16, TFS(&ht_info_transmit_burst_limit_flag)(const struct true_false_string*)(&ht_info_transmit_burst_limit_flag
)
, 0x0008,
23802 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23803
23804 {&hf_ieee80211_ht_info_obss_non_ht_stas_present,
23805 {"OBSS non-HT STAs present", "wlan_mgt.ht.info.obssnonht",
23806 FT_BOOLEAN, 16, TFS(&ht_info_obss_non_ht_stas_present_flag)(const struct true_false_string*)(&ht_info_obss_non_ht_stas_present_flag
)
, 0x0010,
23807 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23808
23809 {&hf_ieee80211_ht_info_reserved_1,
23810 {"Reserved", "wlan_mgt.ht.info.reserved1",
23811 FT_UINT16, BASE_HEX, NULL((void*)0), 0xffe0,
23812 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23813
23814 {&hf_ieee80211_ht_info_delimiter3,
23815 {"HT Information Subset (3 of 3)", "wlan_mgt.ht.info.delim3",
23816 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
23817 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23818
23819 {&hf_ieee80211_ht_info_reserved_2,
23820 {"Reserved", "wlan_mgt.ht.info.reserved2",
23821 FT_UINT16, BASE_HEX, NULL((void*)0), 0x003f,
23822 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23823
23824 {&hf_ieee80211_ht_info_dual_beacon,
23825 {"Dual beacon", "wlan_mgt.ht.info.dualbeacon",
23826 FT_BOOLEAN, 16, TFS(&ht_info_dual_beacon_flag)(const struct true_false_string*)(&ht_info_dual_beacon_flag
)
, 0x0040,
23827 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23828
23829 {&hf_ieee80211_ht_info_dual_cts_protection,
23830 {"Dual Clear To Send (CTS) protection", "wlan_mgt.ht.info.dualcts",
23831 FT_BOOLEAN, 16, TFS(&ht_info_dual_cts_protection_flag)(const struct true_false_string*)(&ht_info_dual_cts_protection_flag
)
, 0x0080,
23832 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23833
23834 {&hf_ieee80211_ht_info_secondary_beacon,
23835 {"Beacon ID", "wlan_mgt.ht.info.secondarybeacon",
23836 FT_BOOLEAN, 16, TFS(&ht_info_secondary_beacon_flag)(const struct true_false_string*)(&ht_info_secondary_beacon_flag
)
, 0x0100,
23837 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23838
23839 {&hf_ieee80211_ht_info_lsig_txop_protection_full_support,
23840 {"L-SIG TXOP Protection Full Support", "wlan_mgt.ht.info.lsigprotsupport",
23841 FT_BOOLEAN, 16, TFS(&ht_info_lsig_txop_protection_full_support_flag)(const struct true_false_string*)(&ht_info_lsig_txop_protection_full_support_flag
)
, 0x0200,
23842 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23843
23844 {&hf_ieee80211_ht_info_pco_active,
23845 {"Phased Coexistence Operation (PCO)", "wlan_mgt.ht.info.pco.active",
23846 FT_BOOLEAN, 16, TFS(&tfs_active_inactive)(const struct true_false_string*)(&tfs_active_inactive), 0x0400,
23847 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23848
23849 {&hf_ieee80211_ht_info_pco_phase,
23850 {"Phased Coexistence Operation (PCO) Phase", "wlan_mgt.ht.info.pco.phase",
23851 FT_BOOLEAN, 16, TFS(&ht_info_pco_phase_flag)(const struct true_false_string*)(&ht_info_pco_phase_flag
)
, 0x0800,
23852 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23853
23854 {&hf_ieee80211_ht_info_reserved_3,
23855 {"Reserved", "wlan_mgt.ht.info.reserved3",
23856 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000,
23857 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23858
23859 {&hf_ieee80211_tag_ap_channel_report_operating_class,
23860 {"Operating Class", "wlan_mgt.ap_channel_report.operating_class",
23861 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
23862 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23863
23864 {&hf_ieee80211_tag_ap_channel_report_channel_list,
23865 {"Channel List", "wlan_mgt.ap_channel_report.channel_list",
23866 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
23867 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23868
23869 {&hf_ieee80211_tag_secondary_channel_offset,
23870 {"Secondary Channel Offset", "wlan_mgt.secchanoffset",
23871 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_secondary_channel_offset_flags)(const struct _value_string*)(ieee80211_tag_secondary_channel_offset_flags
)
, 0,
23872 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23873
23874 {&hf_ieee80211_tag_bss_ap_avg_access_delay,
23875 {"AP Average Access Delay", "wlan_mgt.bss_ap_avg_access_delay",
23876 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
23877 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23878
23879 {&hf_ieee80211_tag_antenna_id,
23880 {"Antenna ID", "wlan_mgt.antenna.id",
23881 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
23882 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23883
23884 {&hf_ieee80211_tag_rsni,
23885 {"RSNI", "wlan_mgt.rsni",
23886 FT_UINT8, BASE_CUSTOM, CF_FUNC(rsni_base_custom)((const void *) (gsize) (rsni_base_custom)), 0x0,
23887 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23888
23889 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask,
23890 {"Available Admission Capacity Bitmask", "wlan_mgt.bss_avb_adm_cap.bitmask",
23891 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
23892 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23893 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0,
23894 {"UP0 (bit0)", "wlan_mgt.bss_avb_adm_cap.bitmask.up0",
23895 FT_BOOLEAN, 16, TFS(&tfs_set_notset)(const struct true_false_string*)(&tfs_set_notset), BSS_BITMASK_UP00x0001,
23896 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23897 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1,
23898 {"UP1 (bit1)", "wlan_mgt.bss_avb_adm_cap.bitmask.up1",
23899 FT_BOOLEAN, 16, TFS(&tfs_set_notset)(const struct true_false_string*)(&tfs_set_notset), BSS_BITMASK_UP10x0002,
23900 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23901 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2,
23902 {"UP2 (bit2)", "wlan_mgt.bss_avb_adm_cap.bitmask.up2",
23903 FT_BOOLEAN, 16, TFS(&tfs_set_notset)(const struct true_false_string*)(&tfs_set_notset), BSS_BITMASK_UP20x0004,
23904 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23905 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3,
23906 {"UP3 (bit3)", "wlan_mgt.bss_avb_adm_cap.bitmask.up3",
23907 FT_BOOLEAN, 16, TFS(&tfs_set_notset)(const struct true_false_string*)(&tfs_set_notset), BSS_BITMASK_UP30x0008,
23908 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23909 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4,
23910 {"UP4 (bit4)", "wlan_mgt.bss_avb_adm_cap.bitmask.up4",
23911 FT_BOOLEAN, 16, TFS(&tfs_set_notset)(const struct true_false_string*)(&tfs_set_notset), BSS_BITMASK_UP40x0010,
23912 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23913 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5,
23914 {"UP5 (bit5)", "wlan_mgt.bss_avb_adm_cap.bitmask.up5",
23915 FT_BOOLEAN, 16, TFS(&tfs_set_notset)(const struct true_false_string*)(&tfs_set_notset), BSS_BITMASK_UP50x0020,
23916 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23917 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6,
23918 {"UP0 (bit6)", "wlan_mgt.bss_avb_adm_cap.bitmask.up6",
23919 FT_BOOLEAN, 16, TFS(&tfs_set_notset)(const struct true_false_string*)(&tfs_set_notset), BSS_BITMASK_UP60x0040,
23920 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23921 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7,
23922 {"UP7 (bit7)", "wlan_mgt.bss_avb_adm_cap.bitmask.up7",
23923 FT_BOOLEAN, 16, TFS(&tfs_set_notset)(const struct true_false_string*)(&tfs_set_notset), BSS_BITMASK_UP70x0080,
23924 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23925 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0,
23926 {"AC0 (bit8)", "wlan_mgt.bss_avb_adm_cap.bitmask.ac0",
23927 FT_BOOLEAN, 16, TFS(&tfs_set_notset)(const struct true_false_string*)(&tfs_set_notset), BSS_BITMASK_AC00x0100,
23928 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23929 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1,
23930 {"AC1 (bit9)", "wlan_mgt.bss_avb_adm_cap.bitmask.AC1",
23931 FT_BOOLEAN, 16, TFS(&tfs_set_notset)(const struct true_false_string*)(&tfs_set_notset), BSS_BITMASK_AC10x0200,
23932 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23933 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2,
23934 {"AC2 (bit10)", "wlan_mgt.bss_avb_adm_cap.bitmask.ac2",
23935 FT_BOOLEAN, 16, TFS(&tfs_set_notset)(const struct true_false_string*)(&tfs_set_notset), BSS_BITMASK_AC20x0400,
23936 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23937 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3,
23938 {"AC3 (bit11)", "wlan_mgt.bss_avb_adm_cap.bitmask.ac3",
23939 FT_BOOLEAN, 16, TFS(&tfs_set_notset)(const struct true_false_string*)(&tfs_set_notset), BSS_BITMASK_AC30x0800,
23940 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23941 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv,
23942 {"Reserved", "wlan_mgt.bss_avb_adm_cap.bitmask.rsv",
23943 FT_UINT16, BASE_HEX, NULL((void*)0), BSS_BITMASK_RSV0xF000,
23944 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23945 {&hf_ieee80211_tag_bss_avb_adm_cap_up0,
23946 {"UP0", "wlan_mgt.bss_avb_adm_cap.up0",
23947 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
23948 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23949 {&hf_ieee80211_tag_bss_avb_adm_cap_up1,
23950 {"UP1", "wlan_mgt.bss_avb_adm_cap.up1",
23951 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
23952 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23953 {&hf_ieee80211_tag_bss_avb_adm_cap_up2,
23954 {"UP2", "wlan_mgt.bss_avb_adm_cap.up2",
23955 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
23956 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23957 {&hf_ieee80211_tag_bss_avb_adm_cap_up3,
23958 {"UP3", "wlan_mgt.bss_avb_adm_cap.up3",
23959 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
23960 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23961 {&hf_ieee80211_tag_bss_avb_adm_cap_up4,
23962 {"UP4", "wlan_mgt.bss_avb_adm_cap.up4",
23963 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
23964 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23965 {&hf_ieee80211_tag_bss_avb_adm_cap_up5,
23966 {"UP5", "wlan_mgt.bss_avb_adm_cap.up5",
23967 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
23968 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23969 {&hf_ieee80211_tag_bss_avb_adm_cap_up6,
23970 {"UP6", "wlan_mgt.bss_avb_adm_cap.up6",
23971 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
23972 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23973 {&hf_ieee80211_tag_bss_avb_adm_cap_up7,
23974 {"UP7", "wlan_mgt.bss_avb_adm_cap.up7",
23975 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
23976 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23977 {&hf_ieee80211_tag_bss_avb_adm_cap_ac0,
23978 {"AC0", "wlan_mgt.bss_avb_adm_cap.ac0",
23979 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
23980 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23981 {&hf_ieee80211_tag_bss_avb_adm_cap_ac1,
23982 {"AC1", "wlan_mgt.bss_avb_adm_cap.ac1",
23983 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
23984 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23985 {&hf_ieee80211_tag_bss_avb_adm_cap_ac2,
23986 {"AC2", "wlan_mgt.bss_avb_adm_cap.ac2",
23987 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
23988 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23989 {&hf_ieee80211_tag_bss_avb_adm_cap_ac3,
23990 {"AC3", "wlan_mgt.bss_avb_adm_cap.ac3",
23991 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
23992 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23993
23994 {&hf_ieee80211_tag_bss_avg_ac_access_delay_be,
23995 {"AC Average Access Delay for Best Effort", "wlan_mgt.bss_avg_ac_access_delay.be",
23996 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
23997 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
23998 {&hf_ieee80211_tag_bss_avg_ac_access_delay_bk,
23999 {"AC Average Access Delay for Best Background", "wlan_mgt.bss_avg_ac_access_delay.bk",
24000 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
24001 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24002 {&hf_ieee80211_tag_bss_avg_ac_access_delay_vi,
24003 {"AC Average Access Delay for Video", "wlan_mgt.bss_avg_ac_access_delay_vi",
24004 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
24005 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24006 {&hf_ieee80211_tag_bss_avg_ac_access_delay_vo,
24007 {"AC Average Access Delay for Voice", "wlan_mgt.bss_avg_ac_access_delay_vo",
24008 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
24009 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24010
24011
24012 /* 802.11-2012 Table 8-119-RM Enabled Capabilities definition */
24013 {&hf_ieee80211_tag_rm_enabled_capabilities,
24014 {"RM Capabilities", "wlan_mgt.rmcap",
24015 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24016 "Signals support for radio measurements in a device", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24017
24018 /* RM Enabled Capability octet 1 */
24019 {&hf_ieee80211_tag_rm_enabled_capabilities_b0,
24020 {"Link Measurement", "wlan_mgt.rmcap.b0",
24021 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x01,
24022 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24023 {&hf_ieee80211_tag_rm_enabled_capabilities_b1,
24024 {"Neighbor Report", "wlan_mgt.rmcap.b1",
24025 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x02,
24026 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24027 {&hf_ieee80211_tag_rm_enabled_capabilities_b2,
24028 {"Parallel Measurements", "wlan_mgt.rmcap.b2",
24029 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x04,
24030 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24031 {&hf_ieee80211_tag_rm_enabled_capabilities_b3,
24032 {"Repeated Measurements", "wlan_mgt.rmcap.b3",
24033 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x08,
24034 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24035 {&hf_ieee80211_tag_rm_enabled_capabilities_b4,
24036 {"Beacon Passive Measurement", "wlan_mgt.rmcap.b4",
24037 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x10,
24038 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24039 {&hf_ieee80211_tag_rm_enabled_capabilities_b5,
24040 {"Beacon Active Measurement", "wlan_mgt.rmcap.b5",
24041 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x20,
24042 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24043 {&hf_ieee80211_tag_rm_enabled_capabilities_b6,
24044 {"Beacon Table Measurement", "wlan_mgt.rmcap.b6",
24045 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x40,
24046 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24047 {&hf_ieee80211_tag_rm_enabled_capabilities_b7,
24048 {"Beacon Measurement Reporting Conditions", "wlan_mgt.rmcap.b7",
24049 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x80,
24050 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24051
24052 /* RM Enabled Capability octet 2 */
24053 {&hf_ieee80211_tag_rm_enabled_capabilities_b8,
24054 {"Frame Measurement", "wlan_mgt.rmcap.b8",
24055 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x01,
24056 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24057 {&hf_ieee80211_tag_rm_enabled_capabilities_b9,
24058 {"Channel Load Measurement", "wlan_mgt.rmcap.b9",
24059 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x02,
24060 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24061 {&hf_ieee80211_tag_rm_enabled_capabilities_b10,
24062 {"Noise Histogram Measurement", "wlan_mgt.rmcap.b10",
24063 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x04,
24064 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24065 {&hf_ieee80211_tag_rm_enabled_capabilities_b11,
24066 {"Statistics Measurement", "wlan_mgt.rmcap.b11",
24067 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x08,
24068 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24069 {&hf_ieee80211_tag_rm_enabled_capabilities_b12,
24070 {"LCI Measurement", "wlan_mgt.rmcap.b12",
24071 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x10,
24072 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24073 {&hf_ieee80211_tag_rm_enabled_capabilities_b13,
24074 {"LCI Azimuth capability", "wlan_mgt.rmcap.b13",
24075 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x20,
24076 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24077 {&hf_ieee80211_tag_rm_enabled_capabilities_b14,
24078 {"Transmit Stream/Category Measurement", "wlan_mgt.rmcap.b14",
24079 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x40,
24080 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24081 {&hf_ieee80211_tag_rm_enabled_capabilities_b15,
24082 {"Triggered Transmit Stream/Category Measurement", "wlan_mgt.rmcap.b15",
24083 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x80,
24084 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24085
24086 /* RM Enabled Capability octet 3 */
24087 {&hf_ieee80211_tag_rm_enabled_capabilities_b16,
24088 {"AP Channel Report capability", "wlan_mgt.rmcap.b16",
24089 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x01,
24090 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24091 {&hf_ieee80211_tag_rm_enabled_capabilities_b17,
24092 {"RM MIB capability", "wlan_mgt.rmcap.b17",
24093 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x02,
24094 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24095 {&hf_ieee80211_tag_rm_enabled_capabilities_b18to20,
24096 {"Operating Channel Max Measurement Duration", "wlan_mgt.rmcap.b18to20",
24097 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1C,
24098 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24099 {&hf_ieee80211_tag_rm_enabled_capabilities_b21to23,
24100 {"Nonoperating Channel Max Measurement Duration", "wlan_mgt.rmcap.b21to23",
24101 FT_UINT8, BASE_DEC, NULL((void*)0), 0xE0,
24102 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24103
24104 /* RM Enabled Capability octet 4 */
24105 {&hf_ieee80211_tag_rm_enabled_capabilities_b24to26,
24106 {"Measurement Pilotcapability", "wlan_mgt.rmcap.b24to26",
24107 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07,
24108 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24109 {&hf_ieee80211_tag_rm_enabled_capabilities_b27,
24110 {"Measurement Pilot Transmission Information", "wlan_mgt.rmcap.b27",
24111 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x08,
24112 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24113 {&hf_ieee80211_tag_rm_enabled_capabilities_b28,
24114 {"Neighbor Report TSF Offset", "wlan_mgt.rmcap.b28",
24115 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x10,
24116 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24117 {&hf_ieee80211_tag_rm_enabled_capabilities_b29,
24118 {"RCPI Measurement capability", "wlan_mgt.rmcap.b29",
24119 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x20,
24120 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24121 {&hf_ieee80211_tag_rm_enabled_capabilities_b30,
24122 {"RSNI Measurement capability", "wlan_mgt.rmcap.b30",
24123 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x40,
24124 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24125 {&hf_ieee80211_tag_rm_enabled_capabilities_b31,
24126 {"BSS Average Access Delay capability", "wlan_mgt.rmcap.b31",
24127 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x80,
24128 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24129
24130 /* RM Enabled Capability octet 5 */
24131 {&hf_ieee80211_tag_rm_enabled_capabilities_b32,
24132 {"BSS Available Admission Capacity capability", "wlan_mgt.rmcap.b32",
24133 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x01,
24134 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24135 {&hf_ieee80211_tag_rm_enabled_capabilities_b33,
24136 {"Antenna capability", "wlan_mgt.rmcap.b33",
24137 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x02,
24138 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24139 {&hf_ieee80211_tag_rm_enabled_capabilities_o5,
24140 {"Reserved", "wlan_mgt.rmcap.o5",
24141 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC,
24142 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24143
24144 {&hf_ieee80211_tag_power_constraint_local,
24145 {"Local Power Constraint", "wlan_mgt.powercon.local",
24146 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
24147 "Value that allows the mitigation requirements to be satisfied in the current channel", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24148
24149 {&hf_ieee80211_tag_power_capability_min,
24150 {"Minimum Transmit Power", "wlan_mgt.powercap.min",
24151 FT_UINT8, BASE_DEC_HEX, NULL((void*)0), 0,
24152 "The nominal minimum transmit power with which the STA is capable of transmitting in the current channel", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24153
24154 {&hf_ieee80211_tag_power_capability_max,
24155 {"Maximum Transmit Power", "wlan_mgt.powercap.max",
24156 FT_UINT8, BASE_DEC_HEX, NULL((void*)0), 0,
24157 "The nominal maximum transmit power with which the STA is capable of transmitting in the current channel", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24158
24159 {&hf_ieee80211_tag_tpc_report_trsmt_pow,
24160 {"Transmit Power", "wlan_mgt.tcprep.trsmt_pow",
24161 FT_INT8, BASE_DEC, NULL((void*)0), 0,
24162 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24163
24164 {&hf_ieee80211_tag_tpc_report_link_mrg,
24165 {"Link Margin", "wlan_mgt.tcprep.link_mrg",
24166 FT_INT8, BASE_DEC, NULL((void*)0), 0,
24167 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24168
24169 {&hf_ieee80211_tag_supported_channels,
24170 {"Supported Channels Set", "wlan_mgt.supchan",
24171 FT_NONE, BASE_NONE, NULL((void*)0), 0,
24172 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24173
24174 {&hf_ieee80211_tag_supported_channels_first,
24175 {"First Supported Channel", "wlan_mgt.supchan.first",
24176 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
24177 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24178
24179 {&hf_ieee80211_tag_supported_channels_range,
24180 {"Supported Channel Range", "wlan_mgt.supchan.range",
24181 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
24182 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24183
24184 {&hf_ieee80211_csa_channel_switch_mode,
24185 {"Channel Switch Mode", "wlan_mgt.csa.channel_switch_mode",
24186 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24187 "Indicates any restrictions on transmission until a channel switch", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24188
24189 {&hf_ieee80211_csa_new_channel_number,
24190 {"New Channel Number", "wlan_mgt.csa.new_channel_number",
24191 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24192 "Set to the number of the channel to which the STA is moving", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24193
24194 {&hf_ieee80211_csa_channel_switch_count,
24195 {"Channel Switch Count", "wlan_mgt.csa.channel_switch.count",
24196 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
24197 "Set to the number of TBTTs until the STA sending the Channel Switch Announcement element switches to the new channel or shall be set to 0", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24198
24199 {&hf_ieee80211_mesh_channel_switch_ttl,
24200 {"Mesh Channel Switch TTL", "wlan_mgt.csa.mesh_channel_switch.ttl",
24201 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
24202 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24203
24204 {&hf_ieee80211_mesh_channel_switch_flag,
24205 {"Mesh Channel Switch Flag", "wlan_mgt.csa.mesh_channel_switch.flag",
24206 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24207 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24208
24209 {&hf_ieee80211_mesh_chswitch_flag_txrestrict,
24210 {"CSA Tx Restrict", "wlan_mgt.csa.mesh_channel_switch.flag.txrestrict",
24211 FT_BOOLEAN, 16, TFS(&csa_txrestrict_flags)(const struct true_false_string*)(&csa_txrestrict_flags), 0x0001,
24212 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24213
24214 {&hf_ieee80211_mesh_chswitch_flag_initiator,
24215 {"CSA Initiator", "wlan_mgt.csa.mesh_channel_switch.flag.initiator",
24216 FT_BOOLEAN, 16, TFS(&csa_initiator_flags)(const struct true_false_string*)(&csa_initiator_flags), 0x0002,
24217 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24218
24219 {&hf_ieee80211_mesh_channel_switch_reason_code,
24220 {"Mesh Channel Switch Reason Code", "wlan_mgt.csa.mesh_channel_switch.reason_code",
24221 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x200, &ieee80211_reason_code_ext, 0,
24222 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24223
24224 {&hf_ieee80211_mesh_channel_switch_precedence_value,
24225 {"Mesh Channel Switch Precedence Value", "wlan_mgt.csa.mesh_channel_switch.pre_value",
24226 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
24227 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24228
24229 {&hf_ieee80211_tag_measure_request_token,
24230 {"Measurement Token", "wlan_mgt.measure.req.token",
24231 FT_UINT8, BASE_HEX, NULL((void*)0), 0xff,
24232 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24233
24234 {&hf_ieee80211_tag_measure_request_mode,
24235 {"Measurement Request Mode", "wlan_mgt.measure.req.mode",
24236 FT_UINT8, BASE_HEX, NULL((void*)0), 0xff,
24237 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24238
24239 {&hf_ieee80211_tag_measure_request_mode_parallel,
24240 {"Parallel", "wlan_mgt.measure.req.reqmode.parallel",
24241 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
24242 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24243
24244 {&hf_ieee80211_tag_measure_request_mode_enable,
24245 {"Measurement Request Mode Field", "wlan_mgt.measure.req.reqmode.enable",
24246 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x02,
24247 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24248
24249 {&hf_ieee80211_tag_measure_request_mode_request,
24250 {"Measurement Reports", "wlan_mgt.measure.req.reqmode.request",
24251 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted)(const struct true_false_string*)(&tfs_accepted_not_accepted
)
, 0x04,
24252 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24253
24254 {&hf_ieee80211_tag_measure_request_mode_report,
24255 {"Autonomous Measurement Reports", "wlan_mgt.measure.req.reqmode.report",
24256 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted)(const struct true_false_string*)(&tfs_accepted_not_accepted
)
, 0x08,
24257 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24258
24259 {&hf_ieee80211_tag_measure_request_mode_duration_mandatory,
24260 {"Duration Mandatory", "wlan_mgt.measure.req.reqmode.duration_mandatory",
24261 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted)(const struct true_false_string*)(&tfs_accepted_not_accepted
)
, 0x10,
24262 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24263
24264 {&hf_ieee80211_tag_measure_request_mode_reserved,
24265 {"Reserved", "wlan_mgt.measure.req.reqmode.reserved",
24266 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0,
24267 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24268
24269 {&hf_ieee80211_tag_measure_request_type,
24270 {"Measurement Request Type", "wlan_mgt.measure.req.reqtype",
24271 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x200, &ieee80211_tag_measure_request_type_flags_ext, 0x00,
24272 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24273
24274 {&hf_ieee80211_tag_measure_request_channel_number,
24275 {"Measurement Channel Number", "wlan_mgt.measure.req.channelnumber",
24276 FT_UINT8, BASE_CUSTOM, CF_FUNC(channel_number_custom)((const void *) (gsize) (channel_number_custom)), 0,
24277 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24278
24279 {&hf_ieee80211_tag_measure_request_start_time,
24280 {"Measurement Start Time", "wlan_mgt.measure.req.starttime",
24281 FT_UINT64, BASE_HEX, NULL((void*)0), 0,
24282 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24283
24284 {&hf_ieee80211_tag_measure_request_duration,
24285 {"Measurement Duration", "wlan_mgt.measure.req.channelnumber",
24286 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
24287 "in TU (1 TU = 1024 us)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24288
24289 {&hf_ieee80211_tag_measure_request_operating_class,
24290 {"Operating Class", "wlan_mgt.measure.req.operatingclass",
24291 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
24292 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24293
24294 {&hf_ieee80211_tag_measure_request_randomization_interval,
24295 {"Randomization Interval", "wlan_mgt.measure.req.randint",
24296 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
24297 "in TU (1 TU = 1024 us)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24298
24299 {&hf_ieee80211_tag_measure_request_measurement_mode,
24300 {"Measurement Mode", "wlan_mgt.measure.req.measurementmode",
24301 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_measurement_mode_flags)(const struct _value_string*)(ieee80211_tag_measure_request_measurement_mode_flags
)
, 0,
24302 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24303
24304 {&hf_ieee80211_tag_measure_request_bssid,
24305 {"BSSID", "wlan_mgt.measure.req.bssid",
24306 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
24307 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24308
24309 {&hf_ieee80211_tag_measure_request_subelement_length,
24310 {"Length", "wlan_mgt.measure.req.sub.length",
24311 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
24312 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24313
24314 {&hf_ieee80211_tag_measure_request_beacon_sub_id,
24315 {"SubElement ID", "wlan_mgt.measure.req.beacon.sub.id",
24316 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_request_beacon_sub_id_flags)(const struct _value_string*)(ieee80211_tag_measure_request_beacon_sub_id_flags
)
, 0,
24317 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24318
24319 {&hf_ieee80211_tag_measure_request_beacon_sub_ssid,
24320 {"SSID", "wlan_mgt.measure.req.beacon.sub.ssid",
24321 FT_STRING, BASE_NONE, 0, 0,
24322 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24323
24324 {&hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition,
24325 {"Reporting Condition", "wlan_mgt.measure.req.beacon.sub.bri.repcond",
24326 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition_flags)(const struct _value_string*)(ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition_flags
)
, 0,
24327 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24328
24329 {&hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset,
24330 {"Threshold/Offset", "wlan_mgt.measure.req.beacon.sub.bri.threshold_offset",
24331 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24332 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24333
24334 {&hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail,
24335 {"Reporting Detail", "wlan_mgt.measure.req.beacon.sub.bri.reporting_detail",
24336 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_beacon_sub_reporting_detail_flags)(const struct _value_string*)(ieee80211_tag_measure_request_beacon_sub_reporting_detail_flags
)
, 0,
24337 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24338
24339 {&hf_ieee80211_tag_measure_request_beacon_sub_request,
24340 {"Request", "wlan_mgt.measure.req.beacon.sub.request",
24341 FT_UINT8, BASE_DEC, 0, 0,
24342 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24343
24344 {&hf_ieee80211_tag_measure_request_beacon_unknown,
24345 {"Unknown Data", "wlan_mgt.measure.req.beacon.unknown",
24346 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
24347 "(not interpreted)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24348
24349 {&hf_ieee80211_tag_measure_request_channel_load_sub_id,
24350 {"SubElement ID", "wlan_mgt.measure.req.channel_load.sub.id",
24351 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_request_channel_load_sub_id_vals)(const struct _value_string*)(ieee80211_tag_measure_request_channel_load_sub_id_vals
)
, 0,
24352 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24353
24354 {&hf_ieee80211_tag_measure_request_channel_load_sub_reporting_condition,
24355 {"Reporting Condition", "wlan_mgt.measure.req.channel_load.sub.repcond",
24356 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_channel_load_sub_reporting_condition_vals)(const struct _value_string*)(ieee80211_tag_measure_request_channel_load_sub_reporting_condition_vals
)
, 0,
24357 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24358
24359 {&hf_ieee80211_tag_measure_request_channel_load_sub_reporting_ref,
24360 {"Reference Value", "wlan_mgt.measure.req.channel_load.sub.ref",
24361 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24362 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24363
24364
24365 {&hf_ieee80211_tag_measure_request_noise_histogram_sub_id,
24366 {"SubElement ID", "wlan_mgt.measure.req.noise_histogram.sub.id",
24367 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_request_noise_histogram_sub_id_vals)(const struct _value_string*)(ieee80211_tag_measure_request_noise_histogram_sub_id_vals
)
, 0,
24368 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24369
24370 {&hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition,
24371 {"Reporting Condition", "wlan_mgt.measure.reqnoise_histogram.sub.repcond",
24372 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition_vals)(const struct _value_string*)(ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition_vals
)
, 0,
24373 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24374
24375 {&hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_anpi_ref,
24376 {"ANPI Reference Value", "wlan_mgt.measure.req.noise_histogram.sub.anpiref",
24377 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24378 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24379
24380
24381 {&hf_ieee80211_tag_measure_request_frame_request_type,
24382 {"Frame Request Type", "wlan_mgt.measure.req.frame_request_type",
24383 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24384 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24385
24386 {&hf_ieee80211_tag_measure_request_mac_address,
24387 {"MAC Address", "wlan_mgt.measure.req.mac_address",
24388 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
24389 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24390
24391 {&hf_ieee80211_tag_measure_request_peer_mac_address,
24392 {"Peer MAC Address", "wlan_mgt.measure.req.peer_mac_address",
24393 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
24394 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24395
24396 {&hf_ieee80211_tag_measure_request_group_id,
24397 {"Group ID", "wlan_mgt.measure.req.groupid",
24398 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x200, &ieee80211_tag_measure_request_group_id_flags_ext, 0,
24399 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24400
24401 {&hf_ieee80211_tag_measure_request_unknown,
24402 {"Unknown Data", "wlan_mgt.measure.req.unknown",
24403 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
24404 "(not interpreted)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24405
24406 {&hf_ieee80211_tag_measure_report_measurement_token,
24407 {"Measurement Token", "wlan_mgt.measure.req.token",
24408 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24409 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24410
24411 {&hf_ieee80211_tag_measure_report_mode,
24412 {"Measurement Report Mode", "wlan_mgt.measure.req.mode",
24413 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24414 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24415
24416 {&hf_ieee80211_tag_measure_report_mode_late,
24417 {"Measurement Report Mode Field", "wlan_mgt.measure.rep.repmode.late",
24418 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x01,
24419 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24420
24421 {&hf_ieee80211_tag_measure_report_mode_incapable,
24422 {"Measurement Reports", "wlan_mgt.measure.rep.repmode.incapable",
24423 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted)(const struct true_false_string*)(&tfs_accepted_not_accepted
)
, 0x02,
24424 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24425
24426 {&hf_ieee80211_tag_measure_report_mode_refused,
24427 {"Autonomous Measurement Reports", "wlan_mgt.measure.rep.repmode.refused",
24428 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted)(const struct true_false_string*)(&tfs_accepted_not_accepted
)
, 0x04,
24429 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24430
24431 {&hf_ieee80211_tag_measure_report_mode_reserved,
24432 {"Reserved", "wlan_mgt.measure.rep.repmode.reserved",
24433 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf8,
24434 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24435
24436 {&hf_ieee80211_tag_measure_report_type,
24437 {"Measurement Report Type", "wlan_mgt.measure.rep.reptype",
24438 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x200, &ieee80211_tag_measure_report_type_flags_ext, 0x00,
24439 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24440
24441 {&hf_ieee80211_tag_measure_report_channel_number,
24442 {"Measurement Channel Number", "wlan_mgt.measure.rep.channelnumber",
24443 FT_UINT8, BASE_CUSTOM, CF_FUNC(channel_number_custom)((const void *) (gsize) (channel_number_custom)), 0,
24444 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24445
24446 {&hf_ieee80211_tag_measure_report_start_time,
24447 {"Measurement Start Time", "wlan_mgt.measure.rep.starttime",
24448 FT_UINT64, BASE_HEX, NULL((void*)0), 0,
24449 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24450
24451 {&hf_ieee80211_tag_measure_report_duration,
24452 {"Measurement Duration", "wlan_mgt.measure.rep.channelnumber",
24453 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
24454 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24455
24456 {&hf_ieee80211_tag_measure_cca_busy_fraction,
24457 {"CCA Busy Fraction", "wlan_mgt.measure.rep.ccabusy",
24458 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24459 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24460
24461 {&hf_ieee80211_tag_measure_basic_map_field,
24462 {"Map Field", "wlan_mgt.measure.rep.mapfield",
24463 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24464 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24465
24466 {&hf_ieee80211_tag_measure_map_field_bss,
24467 {"BSS", "wlan_mgt.measure.rep.repmode.mapfield.bss",
24468 FT_BOOLEAN, 8, TFS(&ieee80211_tag_measure_map_field_bss_flag)(const struct true_false_string*)(&ieee80211_tag_measure_map_field_bss_flag
)
, 0x01,
24469 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24470
24471 {&hf_ieee80211_tag_measure_map_field_odfm,
24472 {"Orthogonal Frequency Division Multiplexing (ODFM) Preamble", "wlan_mgt.measure.rep.repmode.mapfield.bss",
24473 FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected)(const struct true_false_string*)(&tfs_detected_not_detected
)
, 0x02,
24474 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24475
24476 {&hf_ieee80211_tag_measure_map_field_unident_signal,
24477 {"Unidentified Signal", "wlan_mgt.measure.rep.repmode.mapfield.unidentsig",
24478 FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected)(const struct true_false_string*)(&tfs_detected_not_detected
)
, 0x04,
24479 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24480
24481 {&hf_ieee80211_tag_measure_map_field_radar,
24482 {"Radar", "wlan_mgt.measure.rep.repmode.mapfield.radar",
24483 FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected)(const struct true_false_string*)(&tfs_detected_not_detected
)
, 0x08,
24484 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24485
24486 {&hf_ieee80211_tag_measure_map_field_unmeasured,
24487 {"Unmeasured", "wlan_mgt.measure.rep.repmode.mapfield.unmeasured",
24488 FT_BOOLEAN, 8, TFS(&tfs_true_false)(const struct true_false_string*)(&tfs_true_false), 0x10,
24489 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24490
24491 {&hf_ieee80211_tag_measure_map_field_reserved,
24492 {"Reserved", "wlan_mgt.measure.rep.repmode.mapfield.reserved",
24493 FT_UINT8, BASE_HEX, NULL((void*)0), 0xe0,
24494 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24495
24496 {&hf_ieee80211_tag_measure_rpi_histogram_report,
24497 {"Receive Power Indicator (RPI) Histogram Report", "wlan_mgt.measure.rep.rpi.histogram_report",
24498 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
24499 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24500
24501 {&hf_ieee80211_tag_measure_rpi_histogram_report_0,
24502 {"RPI 0 Density", "wlan_mgt.measure.rep.rpi.rpi0density",
24503 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24504 "Receive Power Indicator (RPI) 0 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24505
24506 {&hf_ieee80211_tag_measure_rpi_histogram_report_1,
24507 {"RPI 1 Density", "wlan_mgt.measure.rep.rpi.rpi1density",
24508 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24509 "Receive Power Indicator (RPI) 1 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24510
24511 {&hf_ieee80211_tag_measure_rpi_histogram_report_2,
24512 {"RPI 2 Density", "wlan_mgt.measure.rep.rpi.rpi2density",
24513 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24514 "Receive Power Indicator (RPI) 2 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24515
24516 {&hf_ieee80211_tag_measure_rpi_histogram_report_3,
24517 {"RPI 3 Density", "wlan_mgt.measure.rep.rpi.rpi3density",
24518 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24519 "Receive Power Indicator (RPI) 3 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24520
24521 {&hf_ieee80211_tag_measure_rpi_histogram_report_4,
24522 {"RPI 4 Density", "wlan_mgt.measure.rep.rpi.rpi4density",
24523 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24524 "Receive Power Indicator (RPI) 4 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24525
24526 {&hf_ieee80211_tag_measure_rpi_histogram_report_5,
24527 {"RPI 5 Density", "wlan_mgt.measure.rep.rpi.rpi5density",
24528 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24529 "Receive Power Indicator (RPI) 5 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24530
24531 {&hf_ieee80211_tag_measure_rpi_histogram_report_6,
24532 {"RPI 6 Density", "wlan_mgt.measure.rep.rpi.rpi6density",
24533 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24534 "Receive Power Indicator (RPI) 6 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24535
24536 {&hf_ieee80211_tag_measure_rpi_histogram_report_7,
24537 {"RPI 7 Density", "wlan_mgt.measure.rep.rpi.rpi7density",
24538 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24539 "Receive Power Indicator (RPI) 7 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24540
24541 {&hf_ieee80211_tag_measure_report_operating_class,
24542 {"Operating Class", "wlan_mgt.measure.rep.operatingclass",
24543 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
24544 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24545
24546 {&hf_ieee80211_tag_measure_report_channel_load,
24547 {"Channel Load", "wlan_mgt.measure.rep.chanload",
24548 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24549 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24550
24551 {&hf_ieee80211_tag_measure_report_frame_info,
24552 {"Reported Frame Information", "wlan_mgt.measure.rep.frameinfo",
24553 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24554 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24555
24556 {&hf_ieee80211_tag_measure_report_frame_info_phy_type,
24557 {"Condensed PHY", "wlan_mgt.measure.rep.frameinfo.phytype",
24558 FT_UINT8, BASE_HEX, NULL((void*)0), 0x7F,
24559 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24560
24561 {&hf_ieee80211_tag_measure_report_frame_info_frame_type,
24562 {"Reported Frame Type", "wlan_mgt.measure.rep.frameinfo.frametype",
24563 FT_BOOLEAN, 8, TFS(&ieee80211_tag_measure_report_frame_info_frame_type_flag)(const struct true_false_string*)(&ieee80211_tag_measure_report_frame_info_frame_type_flag
)
, 0x80,
24564 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24565
24566 {&hf_ieee80211_tag_measure_report_rcpi,
24567 {"Received Channel Power Indicator (RCPI)", "wlan_mgt.measure.rep.rcpi",
24568 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24569 "in dBm", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24570
24571 {&hf_ieee80211_tag_measure_report_rsni,
24572 {"Received Signal to Noise Indicator (RSNI)", "wlan_mgt.measure.rep.rsni",
24573 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24574 "in dB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24575
24576 {&hf_ieee80211_tag_measure_report_bssid,
24577 {"BSSID Being Reported", "wlan_mgt.measure.rep.bssid",
24578 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
24579 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24580
24581 {&hf_ieee80211_tag_measure_report_ant_id,
24582 {"Antenna ID", "wlan_mgt.measure.rep.antid",
24583 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24584 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24585
24586 {&hf_ieee80211_tag_measure_report_anpi,
24587 {"ANPI", "wlan_mgt.measure.rep.anpi",
24588 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24589 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24590
24591 {&hf_ieee80211_tag_measure_report_ipi_density_0,
24592 {"IPI Density 0", "wlan_mgt.measure.rep.ipi_density0",
24593 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24594 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24595
24596 {&hf_ieee80211_tag_measure_report_ipi_density_1,
24597 {"IPI Density 1", "wlan_mgt.measure.rep.ipi_density1",
24598 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24599 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24600
24601 {&hf_ieee80211_tag_measure_report_ipi_density_2,
24602 {"IPI Density 2", "wlan_mgt.measure.rep.ipi_density2",
24603 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24604 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24605
24606 {&hf_ieee80211_tag_measure_report_ipi_density_3,
24607 {"IPI Density 3", "wlan_mgt.measure.rep.ipi_density3",
24608 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24609 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24610
24611 {&hf_ieee80211_tag_measure_report_ipi_density_4,
24612 {"IPI Density 4", "wlan_mgt.measure.rep.ipi_density4",
24613 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24614 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24615
24616 {&hf_ieee80211_tag_measure_report_ipi_density_5,
24617 {"IPI Density 5", "wlan_mgt.measure.rep.ipi_density5",
24618 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24619 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24620
24621 {&hf_ieee80211_tag_measure_report_ipi_density_6,
24622 {"IPI Density 6", "wlan_mgt.measure.rep.ipi_density6",
24623 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24624 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24625
24626 {&hf_ieee80211_tag_measure_report_ipi_density_7,
24627 {"IPI Density 7", "wlan_mgt.measure.rep.ipi_density7",
24628 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24629 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24630
24631 {&hf_ieee80211_tag_measure_report_ipi_density_8,
24632 {"IPI Density 8", "wlan_mgt.measure.rep.ipi_density8",
24633 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24634 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24635
24636 {&hf_ieee80211_tag_measure_report_ipi_density_9,
24637 {"IPI Density 9", "wlan_mgt.measure.rep.ipi_density9",
24638 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24639 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24640
24641 {&hf_ieee80211_tag_measure_report_ipi_density_10,
24642 {"IPI Density 10", "wlan_mgt.measure.rep.ipi_density10",
24643 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24644 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24645
24646 {&hf_ieee80211_tag_measure_report_parent_tsf,
24647 {"Parent Timing Synchronization Function (TSF)", "wlan_mgt.measure.rep.parenttsf",
24648 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
24649 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24650
24651 {&hf_ieee80211_tag_measure_report_subelement_length,
24652 {"Length", "wlan_mgt.measure.req.sub.length",
24653 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
24654 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24655
24656 {&hf_ieee80211_tag_measure_report_beacon_sub_id,
24657 {"SubElement ID", "wlan_mgt.measure.req.beacon.sub.id",
24658 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_report_beacon_sub_id_vals)(const struct _value_string*)(ieee80211_tag_measure_report_beacon_sub_id_vals
)
, 0,
24659 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24660
24661 {&hf_ieee80211_tag_measure_report_unknown,
24662 {"Unknown Data", "wlan_mgt.measure.rep.unknown",
24663 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
24664 "(not interpreted)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24665
24666 {&hf_ieee80211_tag_quiet_count,
24667 {"Count", "wlan_mgt.quiet.count",
24668 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
24669 "Set to the number of TBTTs until the beacon interval during which the next quiet interval shall start", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24670
24671 {&hf_ieee80211_tag_quiet_period,
24672 {"Period", "wlan_mgt.quiet.period",
24673 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
24674 "Set to the number of beacon intervals between the start of regularly scheduled quiet intervals", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24675
24676 {&hf_ieee80211_tag_quiet_duration,
24677 {"Duration", "wlan_mgt.quiet.duration",
24678 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
24679 "Set to the duration of the quiet interval", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24680
24681 {&hf_ieee80211_tag_quiet_offset,
24682 {"Offset", "wlan_mgt.quiet.offset",
24683 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
24684 "Set to the offset of the start of the quiet interval from the TBTT", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24685
24686 {&hf_ieee80211_tag_dfs_owner,
24687 {"Owner", "wlan_mgt.dfs.owner",
24688 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
24689 "Set to the individual IEEE MAC address of the STA that is the currently known DFS Owner in the IBSS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24690
24691 {&hf_ieee80211_tag_dfs_recovery_interval,
24692 {"Recovery Interval", "wlan_mgt.dfs.recovery_interval",
24693 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
24694 "Indicates the time interval that shall be used for DFS owner recovery", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24695
24696 {&hf_ieee80211_tag_dfs_channel_map,
24697 {"Channel Map", "wlan_mgt.dfs.channel_map",
24698 FT_NONE, BASE_NONE, NULL((void*)0), 0,
24699 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24700
24701 {&hf_ieee80211_tag_dfs_channel_number,
24702 {"Channel Number", "wlan_mgt.dfs.channel_number",
24703 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
24704 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24705
24706 {&hf_ieee80211_tag_dfs_map,
24707 {"Map", "wlan_mgt.dfs.map",
24708 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24709 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24710
24711 {&hf_ieee80211_tag_erp_info,
24712 {"ERP Information", "wlan_mgt.erp_info",
24713 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24714 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24715
24716 {&hf_ieee80211_tag_erp_info_erp_present,
24717 {"Non ERP Present", "wlan_mgt.erp_info.erp_present",
24718 FT_BOOLEAN, 8, TFS(&tfs_set_notset)(const struct true_false_string*)(&tfs_set_notset), 0x01,
24719 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24720
24721 {&hf_ieee80211_tag_erp_info_use_protection,
24722 {"Use Protection", "wlan_mgt.erp_info.use_protection",
24723 FT_BOOLEAN, 8, TFS(&tfs_set_notset)(const struct true_false_string*)(&tfs_set_notset), 0x02,
24724 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24725
24726 {&hf_ieee80211_tag_erp_info_barker_preamble_mode,
24727 {"Barker Preamble Mode", "wlan_mgt.erp_info.barker_preamble_mode",
24728 FT_BOOLEAN, 8, TFS(&tfs_set_notset)(const struct true_false_string*)(&tfs_set_notset), 0x04,
24729 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24730
24731 {&hf_ieee80211_tag_erp_info_reserved,
24732 {"Reserved", "wlan_mgt.erp_info.reserved",
24733 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8,
24734 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24735
24736 /* Table 8-103-Capabilities field */
24737 {&hf_ieee80211_tag_extended_capabilities,
24738 {"Extended Capabilities", "wlan_mgt.extcap",
24739 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
24740 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24741
24742 /* P802.11n/D6.0 */
24743 /* Extended Capability octet 1 */
24744 {&hf_ieee80211_tag_extended_capabilities_b0,
24745 {"20/40 BSS Coexistence Management Support", "wlan_mgt.extcap.b0",
24746 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x01,
24747 "HT Information Exchange Support", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24748
24749 /* P802.11p/D4.0 */
24750 {&hf_ieee80211_tag_extended_capabilities_b1,
24751 {"On-demand beacon", "wlan_mgt.extcap.b1",
24752 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x02,
24753 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24754
24755 {&hf_ieee80211_tag_extended_capabilities_b2,
24756 {"Extended Channel Switching", "wlan_mgt.extcap.b2",
24757 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x04,
24758 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24759
24760 {&hf_ieee80211_tag_extended_capabilities_b3,
24761 {"WAVE indication", "wlan_mgt.extcap.b3",
24762 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x08,
24763 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24764 /*End: P802.11p/D4.0 */
24765
24766 {&hf_ieee80211_tag_extended_capabilities_b4,
24767 {"PSMP Capability", "wlan_mgt.extcap.b4",
24768 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x10,
24769 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24770
24771 {&hf_ieee80211_tag_extended_capabilities_b5,
24772 {"Reserved", "wlan_mgt.extcap.b5",
24773 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20,
24774 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24775
24776 {&hf_ieee80211_tag_extended_capabilities_b6,
24777 {"S-PSMP Support", "wlan_mgt.extcap.b6",
24778 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x40,
24779 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24780
24781 {&hf_ieee80211_tag_extended_capabilities_b7,
24782 {"Event", "wlan_mgt.extcap.b7",
24783 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x80,
24784 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24785
24786
24787 /* Extended Capability octet 2 */
24788 {&hf_ieee80211_tag_extended_capabilities_b8,
24789 {"Diagnostics", "wlan_mgt.extcap.b8",
24790 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x01,
24791 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24792
24793 {&hf_ieee80211_tag_extended_capabilities_b9,
24794 {"Multicast Diagnostics", "wlan_mgt.extcap.b9",
24795 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x02,
24796 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24797
24798 {&hf_ieee80211_tag_extended_capabilities_b10,
24799 {"Location Tracking", "wlan_mgt.extcap.b10",
24800 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x04,
24801 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24802
24803 {&hf_ieee80211_tag_extended_capabilities_b11,
24804 {"FMS", "wlan_mgt.extcap.b11",
24805 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x08,
24806 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24807
24808 {&hf_ieee80211_tag_extended_capabilities_b12,
24809 {"Proxy ARP Service", "wlan_mgt.extcap.b12",
24810 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x10,
24811 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24812
24813 {&hf_ieee80211_tag_extended_capabilities_b13,
24814 {"Collocated Interference Reporting", "wlan_mgt.extcap.b13",
24815 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x20,
24816 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24817
24818 {&hf_ieee80211_tag_extended_capabilities_b14,
24819 {"Civic Location", "wlan_mgt.extcap.b14",
24820 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x40,
24821 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24822
24823 {&hf_ieee80211_tag_extended_capabilities_b15,
24824 {"Geospatial Location", "wlan_mgt.extcap.b15",
24825 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x80,
24826 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24827
24828
24829 /* Extended Capability octet 3 */
24830 {&hf_ieee80211_tag_extended_capabilities_b16,
24831 {"TFS", "wlan_mgt.extcap.b16",
24832 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x01,
24833 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24834
24835 {&hf_ieee80211_tag_extended_capabilities_b17,
24836 {"WNM-Sleep Mode", "wlan_mgt.extcap.b17",
24837 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x02,
24838 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24839
24840 {&hf_ieee80211_tag_extended_capabilities_b18,
24841 {"TIM Broadcast", "wlan_mgt.extcap.b18",
24842 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x04,
24843 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24844
24845 {&hf_ieee80211_tag_extended_capabilities_b19,
24846 {"BSS Transition", "wlan_mgt.extcap.b19",
24847 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x08,
24848 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24849
24850 {&hf_ieee80211_tag_extended_capabilities_b20,
24851 {"QoS Traffic Capability", "wlan_mgt.extcap.b20",
24852 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x10,
24853 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24854
24855 {&hf_ieee80211_tag_extended_capabilities_b21,
24856 {"AC Station Count", "wlan_mgt.extcap.b21",
24857 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x20,
24858 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24859
24860 {&hf_ieee80211_tag_extended_capabilities_b22,
24861 {"Multiple BSSID", "wlan_mgt.extcap.b22",
24862 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x40,
24863 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24864
24865 {&hf_ieee80211_tag_extended_capabilities_b23,
24866 {"Timing Measurement", "wlan_mgt.extcap.b23",
24867 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x80,
24868 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24869
24870
24871 /* Extended Capability octet 4 */
24872 {&hf_ieee80211_tag_extended_capabilities_b24,
24873 {"Channel Usage", "wlan_mgt.extcap.b24",
24874 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x01,
24875 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24876
24877 {&hf_ieee80211_tag_extended_capabilities_b25,
24878 {"SSID List", "wlan_mgt.extcap.b25",
24879 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x02,
24880 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24881
24882 {&hf_ieee80211_tag_extended_capabilities_b26,
24883 {"DMS", "wlan_mgt.extcap.b26",
24884 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x04,
24885 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24886
24887 {&hf_ieee80211_tag_extended_capabilities_b27,
24888 {"UTC TSF Offset", "wlan_mgt.extcap.b27",
24889 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x08,
24890 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24891
24892 {&hf_ieee80211_tag_extended_capabilities_b28,
24893 {"Peer U-APSD Buffer STA Support", "wlan_mgt.extcap.b28",
24894 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x10,
24895 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24896
24897 {&hf_ieee80211_tag_extended_capabilities_b29,
24898 {"TDLS Peer PSM Support", "wlan_mgt.extcap.b29",
24899 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x20,
24900 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24901
24902 {&hf_ieee80211_tag_extended_capabilities_b30,
24903 {"TDLS channel switching", "wlan_mgt.extcap.b30",
24904 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x40,
24905 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24906
24907 {&hf_ieee80211_tag_extended_capabilities_b31,
24908 {"Interworking", "wlan_mgt.extcap.b31",
24909 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x80,
24910 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24911
24912
24913 /* Extended Capability octet 5 */
24914 {&hf_ieee80211_tag_extended_capabilities_b32,
24915 {"QoS Map", "wlan_mgt.extcap.b32",
24916 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x01,
24917 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24918
24919 {&hf_ieee80211_tag_extended_capabilities_b33,
24920 {"EBR", "wlan_mgt.extcap.b33",
24921 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x02,
24922 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24923
24924 {&hf_ieee80211_tag_extended_capabilities_b34,
24925 {"SSPN Interface", "wlan_mgt.extcap.b34",
24926 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x04,
24927 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24928
24929 {&hf_ieee80211_tag_extended_capabilities_b35,
24930 {"Reserved", "wlan_mgt.extcap.b35",
24931 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
24932 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24933
24934 {&hf_ieee80211_tag_extended_capabilities_b36,
24935 {"MSGCF Capability", "wlan_mgt.extcap.b36",
24936 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x10,
24937 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24938
24939 {&hf_ieee80211_tag_extended_capabilities_b37,
24940 {"TDLS support", "wlan_mgt.extcap.b37",
24941 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x20,
24942 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24943
24944 {&hf_ieee80211_tag_extended_capabilities_b38,
24945 {"TDLS Prohibited", "wlan_mgt.extcap.b38",
24946 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x40,
24947 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24948
24949 {&hf_ieee80211_tag_extended_capabilities_b39,
24950 {"TDLS Channel Switching Prohibited", "wlan_mgt.extcap.b39",
24951 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x80,
24952 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24953
24954 /* Extended Capability octet 6 */
24955 {&hf_ieee80211_tag_extended_capabilities_b40,
24956 {"Reject Unadmitted Frame", "wlan_mgt.extcap.b40",
24957 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x01,
24958 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24959
24960 {&hf_ieee80211_tag_extended_capabilities_serv_int_granularity,
24961 {"Service Interval Granularity",
24962 "wlan_mgt.extcap.serv_int_granularity",
24963 FT_UINT8, BASE_DEC, VALS(service_interval_granularity_vals)(const struct _value_string*)(service_interval_granularity_vals
)
, 0x0e,
24964 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24965
24966 {&hf_ieee80211_tag_extended_capabilities_b44,
24967 {"Identifier Location", "wlan_mgt.extcap.b44",
24968 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x10,
24969 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24970
24971 {&hf_ieee80211_tag_extended_capabilities_b45,
24972 {"U-APSD Coexistence", "wlan_mgt.extcap.b45",
24973 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x20,
24974 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24975
24976 {&hf_ieee80211_tag_extended_capabilities_b46,
24977 {"WNM-Notification", "wlan_mgt.extcap.b46",
24978 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x40,
24979 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24980
24981 {&hf_ieee80211_tag_extended_capabilities_b47,
24982 {"QAB Capability", "wlan_mgt.extcap.b47",
24983 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80,
24984 "AP supports QAB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24985
24986 /* Extended Capability octet 7 */
24987 {&hf_ieee80211_tag_extended_capabilities_b48,
24988 {"UTF-8 SSID", "wlan_mgt.extcap.b48",
24989 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x01,
24990 "The SSID in this BSS is interpreted using UTF-8 encoding", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24991
24992 {&hf_ieee80211_tag_extended_capabilities_o7,
24993 {"Reserved", "wlan_mgt.extcap.o7",
24994 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfe,
24995 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
24996
24997 /* Extended Capability octet 8 */
24998 {&hf_ieee80211_tag_extended_capabilities_b61,
24999 {"TDLS Wider Bandwidth", "wlan_mgt.extcap.b61",
25000 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x20,
25001 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25002
25003 {&hf_ieee80211_tag_extended_capabilities_b62,
25004 {"Operating Mode Notification", "wlan_mgt.extcap.b62",
25005 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)(const struct true_false_string*)(&tfs_supported_not_supported
)
, 0x40,
25006 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25007
25008 {&hf_ieee80211_tag_extended_capabilities_b63,
25009 {"Max Number Of MSDUs In A-MSDU", "wlan_mgt.extcap.b63",
25010 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
25011 "Part 1 (bit63)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25012
25013 {&hf_ieee80211_tag_extended_capabilities_o8,
25014 {"Reserved", "wlan_mgt.extcap.o8",
25015 FT_UINT8, BASE_HEX, NULL((void*)0), 0x1f,
25016 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25017
25018 /* Extended Capability octet 9 */
25019 {&hf_ieee80211_tag_extended_capabilities_b64,
25020 {"Max Number Of MSDUs In A-MSDU64", "wlan_mgt.extcap.b64",
25021 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
25022 "Part 2 (bit64)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25023
25024 {&hf_ieee80211_tag_extended_capabilities_o9,
25025 {"Reserved", "wlan_mgt.extcap.o9",
25026 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfe,
25027 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25028
25029 {&hf_ieee80211_tag_cisco_ccx1_unknown,
25030 {"Unknown", "wlan_mgt.cisco.ccx1.unknown",
25031 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
25032 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25033
25034 {&hf_ieee80211_tag_cisco_ccx1_name,
25035 {"Name", "wlan_mgt.cisco.ccx1.name",
25036 FT_STRING, BASE_NONE, NULL((void*)0), 0,
25037 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25038
25039 {&hf_ieee80211_tag_cisco_ccx1_clients,
25040 {"Clients", "wlan_mgt.cisco.ccx1.clients",
25041 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
25042 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25043
25044 {&hf_ieee80211_tag_cisco_ccx1_unknown2,
25045 {"Unknown2", "wlan_mgt.cisco.ccx1.unknown2",
25046 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
25047 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25048
25049 {&hf_ieee80211_tag_neighbor_report_bssid,
25050 {"BSSID", "wlan_mgt.nreport.bssid",
25051 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
25052 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25053
25054 {&hf_ieee80211_tag_neighbor_report_bssid_info,
25055 {"BSSID Information", "wlan_mgt.nreport.bssid.info",
25056 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
25057 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25058
25059 {&hf_ieee80211_tag_neighbor_report_bssid_info_reachability,
25060 {"AP Reachability", "wlan_mgt.nreport.bssid.info.reachability",
25061 FT_UINT32, BASE_HEX, VALS(ieee80211_neighbor_report_bssid_info_reachability_vals)(const struct _value_string*)(ieee80211_neighbor_report_bssid_info_reachability_vals
)
, 0x00000003,
25062 "Indicates whether the AP identified by this BSSID is reachable by the STA that requested the neighbor report", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25063
25064 {&hf_ieee80211_tag_neighbor_report_bssid_info_security,
25065 {"Security", "wlan_mgt.nreport.bssid.info.security",
25066 FT_BOOLEAN, 32, NULL((void*)0), 0x00000004,
25067 "Indicates that the AP identified by this BSSID supports the same security provisioning as used by the STA in its current association", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25068
25069 {&hf_ieee80211_tag_neighbor_report_bssid_info_key_scope,
25070 {"Key Scope", "wlan_mgt.nreport.bssid.info.keyscope",
25071 FT_BOOLEAN, 32, NULL((void*)0), 0x00000008,
25072 "indicates the AP indicated by this BSSID has the same authenticator as the AP sending the report", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25073
25074 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability,
25075 {"Capability", "wlan_mgt.nreport.bssid.info.capability",
25076 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000003F0,
25077 "Contains selected capability information for the AP indicated by this BSSID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25078
25079 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng,
25080 {"Spectrum Management", "wlan_mgt.nreport.bssid.info.capability.specmngt",
25081 FT_BOOLEAN, 32, NULL((void*)0), 0x00000010,
25082 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25083
25084 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos,
25085 {"QoS", "wlan_mgt.nreport.bssid.info.capability.qos",
25086 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020,
25087 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25088
25089 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd,
25090 {"APSD", "wlan_mgt.nreport.bssid.info.capability.apsd",
25091 FT_BOOLEAN, 32, NULL((void*)0), 0x00000040,
25092 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25093
25094 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt,
25095 {"Radio Measurement", "wlan_mgt.nreport.bssid.info.capability.radiomsnt",
25096 FT_BOOLEAN, 32, NULL((void*)0), 0x00000080,
25097 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25098
25099 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_dback,
25100 {"Delayed Block Ack", "wlan_mgt.nreport.bssid.info.capability.dback",
25101 FT_BOOLEAN, 32, NULL((void*)0), 0x000000100,
25102 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25103
25104 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_iback,
25105 {"Immediate Block Ack", "wlan_mgt.nreport.bssid.info.capability.iback",
25106 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200,
25107 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25108
25109 {&hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain,
25110 {"Mobility Domain", "wlan_mgt.nreport.bssid.info.mobilitydomain",
25111 FT_BOOLEAN, 32, NULL((void*)0), 0x00000400,
25112 "", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25113
25114 {&hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput,
25115 {"High Throughput Control (+HTC)", "wlan_mgt.nreport.bssid.info.hthoughput",
25116 FT_BOOLEAN, 32, NULL((void*)0), 0x00000800,
25117 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25118
25119 {&hf_ieee80211_tag_neighbor_report_bssid_info_reserved,
25120 {"Reserved", "wlan_mgt.nreport.bssid.info.reserved",
25121 FT_UINT32, BASE_HEX, NULL((void*)0), 0xFFFFF000,
25122 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25123
25124 {&hf_ieee80211_tag_neighbor_report_ope_class,
25125 {"Operating Class", "wlan_mgt.nreport.opeclass",
25126 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
25127 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25128
25129 {&hf_ieee80211_tag_neighbor_report_channel_number,
25130 {"Channel Number", "wlan_mgt.nreport.channumber",
25131 FT_UINT8, BASE_CUSTOM, CF_FUNC(channel_number_custom)((const void *) (gsize) (channel_number_custom)), 0,
25132 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25133
25134 {&hf_ieee80211_tag_neighbor_report_phy_type,
25135 {"PHY Type", "wlan_mgt.nreport.phytype",
25136 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
25137 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25138
25139 {&hf_ieee80211_tag_neighbor_report_subelement_id,
25140 {"Subelement ID", "wlan_mgt.nreport.subelement_id",
25141 FT_UINT8, BASE_HEX, VALS(ieee80211_neighbor_report_subelement_id_vals)(const struct _value_string*)(ieee80211_neighbor_report_subelement_id_vals
)
, 0,
25142 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25143
25144 {&hf_ieee80211_tag_neighbor_report_subelement_length,
25145 {"Length", "wlan_mgt.nreport.phytype.subelement_length",
25146 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
25147 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25148
25149 {&hf_ieee80211_tag_supported_ope_classes_current,
25150 {"Current Operating Class", "wlan_mgt.supopeclass.current",
25151 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
25152 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25153
25154 {&hf_ieee80211_tag_supported_ope_classes_alternate,
25155 {"Alternate Operating Classes", "wlan_mgt.supopeclass.alt",
25156 FT_STRING, BASE_NONE, NULL((void*)0), 0,
25157 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25158
25159 {&hf_ieee80211_wfa_ie_type,
25160 {"Type", "wlan_mgt.wfa.ie.type",
25161 FT_UINT8, BASE_HEX, VALS(ieee802111_wfa_ie_type_vals)(const struct _value_string*)(ieee802111_wfa_ie_type_vals), 0,
25162 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25163
25164 {&hf_ieee80211_wfa_ie_wpa_version,
25165 {"WPA Version", "wlan_mgt.wfa.ie.wpa.version",
25166 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
25167 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25168
25169 {&hf_ieee80211_wfa_ie_wpa_mcs,
25170 {"Multicast Cipher Suite", "wlan_mgt.wfa.ie.wpa.mcs",
25171 FT_UINT32, BASE_CUSTOM, CF_FUNC(wpa_mcs_base_custom)((const void *) (gsize) (wpa_mcs_base_custom)), 0,
25172 "Contains the cipher suite selector used by the BSS to protect broadcast/multicasttraffic", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25173
25174 {&hf_ieee80211_wfa_ie_wpa_mcs_oui,
25175 {"Multicast Cipher Suite OUI", "wlan_mgt.wfa.ie.wpa.mcs.oui",
25176 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom)((const void *) (gsize) (oui_base_custom)), 0,
25177 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25178
25179 {&hf_ieee80211_wfa_ie_wpa_mcs_type,
25180 {"Multicast Cipher Suite type", "wlan_mgt.wfa.ie.wpa.mcs.type",
25181 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
25182 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25183
25184 {&hf_ieee80211_wfa_ie_wpa_mcs_wfa_type,
25185 {"Multicast Cipher Suite type", "wlan_mgt.wfa.ie.wpa.mcs.type",
25186 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_cipher_vals)(const struct _value_string*)(ieee80211_wfa_ie_wpa_cipher_vals
)
, 0,
25187 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25188
25189 {&hf_ieee80211_wfa_ie_wpa_ucs_count,
25190 {"Unicast Cipher Suite Count", "wlan_mgt.wfa.ie.wpa.ucs.count",
25191 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
25192 "Indicates the number of pairwise cipher suite selectors that are contained in the Unicast Cipher Suite List", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25193
25194 {&hf_ieee80211_wfa_ie_wpa_ucs_list,
25195 {"Unicast Cipher Suite List", "wlan_mgt.wfa.ie.wpa.ucs.list",
25196 FT_NONE, BASE_NONE, NULL((void*)0), 0,
25197 "Contains a series of cipher suite selectors that indicate the Unicast cipher suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25198
25199 {&hf_ieee80211_wfa_ie_wpa_ucs,
25200 {"Unicast Cipher Suite", "wlan_mgt.wfa.ie.wpa.ucs",
25201 FT_UINT32, BASE_CUSTOM, CF_FUNC(wpa_ucs_base_custom)((const void *) (gsize) (wpa_ucs_base_custom)), 0,
25202 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25203
25204 {&hf_ieee80211_wfa_ie_wpa_ucs_oui,
25205 {"Unicast Cipher Suite OUI", "wlan_mgt.wfa.ie.wpau.cs.oui",
25206 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom)((const void *) (gsize) (oui_base_custom)), 0,
25207 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25208
25209 {&hf_ieee80211_wfa_ie_wpa_ucs_type,
25210 {"Unicast Cipher Suite type", "wlan_mgt.wfa.ie.wpa.ucs.type",
25211 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
25212 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25213
25214 {&hf_ieee80211_wfa_ie_wpa_ucs_wfa_type,
25215 {"Unicast Cipher Suite type", "wlan_mgt.wfa.ie.wpa.ucs.type",
25216 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_cipher_vals)(const struct _value_string*)(ieee80211_wfa_ie_wpa_cipher_vals
)
, 0,
25217 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25218
25219 {&hf_ieee80211_wfa_ie_wpa_akms_count,
25220 {"Auth Key Management (AKM) Suite Count", "wlan_mgt.wfa.ie.wpa.akms.count",
25221 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
25222 "Indicates the number of Auth Key Management suite selectors that are contained in the Auth Key Management Suite List", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25223
25224 {&hf_ieee80211_wfa_ie_wpa_akms_list,
25225 {"Auth Key Management (AKM) List", "wlan_mgt.wfa.ie.wpa.akms.list",
25226 FT_NONE, BASE_NONE, NULL((void*)0), 0,
25227 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25228
25229 {&hf_ieee80211_wfa_ie_wpa_akms,
25230 {"Auth Key Management (AKM) Suite", "wlan_mgt.wfa.ie.wpa.akms",
25231 FT_UINT32, BASE_CUSTOM, CF_FUNC(wpa_akms_base_custom)((const void *) (gsize) (wpa_akms_base_custom)), 0,
25232 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25233
25234 {&hf_ieee80211_wfa_ie_wpa_akms_oui,
25235 {"Auth Key Management (AKM) OUI", "wlan_mgt.wfa.ie.wpa.akms.oui",
25236 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom)((const void *) (gsize) (oui_base_custom)), 0,
25237 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25238
25239 {&hf_ieee80211_wfa_ie_wpa_akms_type,
25240 {"Auth Key Management (AKM) type", "wlan_mgt.wfa.ie.wpa.akms.type",
25241 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
25242 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25243
25244 {&hf_ieee80211_wfa_ie_wpa_akms_wfa_type,
25245 {"Auth Key Management (AKM) type", "wlan_mgt.wfa.ie.wpa.type",
25246 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_keymgmt_vals)(const struct _value_string*)(ieee80211_wfa_ie_wpa_keymgmt_vals
)
, 0,
25247 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25248
25249 {&hf_ieee80211_wfa_ie_wme_subtype,
25250 {"WME Subtype", "wlan_mgt.wfa.ie.wme.subtype",
25251 FT_UINT8, BASE_DEC, VALS(ieee802111_wfa_ie_wme_type)(const struct _value_string*)(ieee802111_wfa_ie_wme_type), 0,
25252 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25253
25254 {&hf_ieee80211_wfa_ie_wme_version,
25255 {"WME Version", "wlan_mgt.wfa.ie.wme.version",
25256 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
25257 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25258
25259 {&hf_ieee80211_wfa_ie_wme_qos_info,
25260 {"WME QoS Info", "wlan_mgt.wfa.ie.wme.qos_info",
25261 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
25262 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25263
25264 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length,
25265 {"Max SP Length", "wlan_mgt.wfa.ie.wme.qos_info.sta.max_sp_length",
25266 FT_UINT8, BASE_HEX, VALS(ieee802111_wfa_ie_wme_qos_info_sta_max_sp_length_vals)(const struct _value_string*)(ieee802111_wfa_ie_wme_qos_info_sta_max_sp_length_vals
)
, 0x60,
25267 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25268
25269 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be,
25270 {"AC_BE", "wlan_mgt.wfa.ie.wme.qos_info.sta.ac_be",
25271 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs)(const struct true_false_string*)(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs
)
, 0x08,
25272 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25273
25274 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk,
25275 {"AC_BK", "wlan_mgt.wfa.ie.wme.qos_info.sta.ac_bk",
25276 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs)(const struct true_false_string*)(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs
)
, 0x04,
25277 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25278
25279 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi,
25280 {"AC_VI", "wlan_mgt.wfa.ie.wme.qos_info.sta.ac_vi",
25281 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs)(const struct true_false_string*)(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs
)
, 0x02,
25282 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25283
25284 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo,
25285 {"AC_VO", "wlan_mgt.wfa.ie.wme.qos_info.sta.ac_vo",
25286 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs)(const struct true_false_string*)(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs
)
, 0x01,
25287 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25288
25289 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved,
25290 {"Reserved", "wlan_mgt.wfa.ie.wme.qos_info.sta.reserved",
25291 FT_UINT8, BASE_HEX, NULL((void*)0), 0x90,
25292 "Must Be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25293
25294 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd,
25295 {"U-APSD", "wlan_mgt.wfa.ie.wme.qos_info.ap.u_apsd",
25296 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x80,
25297 "Indicates the WMM AP is currently supporting unscheduled automatic power save delivery", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25298
25299 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count,
25300 {"Parameter Set Count", "wlan_mgt.wfa.ie.wme.qos_info.ap.parameter_set_count",
25301 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0F,
25302 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25303
25304 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved,
25305 {"Reserved", "wlan_mgt.wfa.ie.wme.qos_info.ap.reserved",
25306 FT_UINT8, BASE_HEX, NULL((void*)0), 0x70,
25307 "Must Be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25308
25309 {&hf_ieee80211_wfa_ie_wme_reserved,
25310 {"Reserved", "wlan_mgt.wfa.ie.wme.reserved",
25311 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
25312 "Must Be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25313
25314 {&hf_ieee80211_wfa_ie_wme_ac_parameters,
25315 {"Ac Parameters", "wlan_mgt.wfa.ie.wme.acp",
25316 FT_NONE, BASE_NONE, NULL((void*)0), 0,
25317 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25318
25319 {&hf_ieee80211_wfa_ie_wme_acp_aci_aifsn,
25320 {"ACI / AIFSN Field", "wlan_mgt.wfa.ie.wme.acp.aci_aifsn",
25321 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
25322 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25323
25324 {&hf_ieee80211_wfa_ie_wme_acp_aci,
25325 {"ACI", "wlan_mgt.wfa.ie.wme.acp.aci",
25326 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals)(const struct _value_string*)(ieee80211_wfa_ie_wme_acs_vals), 0x60,
25327 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25328
25329 {&hf_ieee80211_wfa_ie_wme_acp_acm,
25330 {"Admission Control Mandatory", "wlan_mgt.wfa.ie.wme.acp.acm",
25331 FT_BOOLEAN, 8, TFS(&tfs_yes_no)(const struct true_false_string*)(&tfs_yes_no), 0x10,
25332 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25333
25334 {&hf_ieee80211_wfa_ie_wme_acp_aifsn,
25335 {"AIFSN", "wlan_mgt.wfa.ie.wme.acp.aifsn",
25336 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
25337 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25338
25339 {&hf_ieee80211_wfa_ie_wme_acp_reserved,
25340 {"Reserved", "wlan_mgt.wfa.ie.wme.acp.reserved",
25341 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
25342 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25343
25344 {&hf_ieee80211_wfa_ie_wme_acp_ecw,
25345 {"ECW", "wlan_mgt.wfa.ie.wme.acp.ecw",
25346 FT_UINT8, BASE_HEX, NULL((void*)0), 0x00,
25347 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25348
25349 {&hf_ieee80211_wfa_ie_wme_acp_ecw_max,
25350 {"ECW Max", "wlan_mgt.wfa.ie.wme.acp.ecw.max",
25351 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF0,
25352 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25353
25354 {&hf_ieee80211_wfa_ie_wme_acp_ecw_min,
25355 {"ECW Min", "wlan_mgt.wfa.ie.wme.acp.ecw.min",
25356 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
25357 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25358
25359 {&hf_ieee80211_wfa_ie_wme_acp_cw_max,
25360 {"CW Max", "wlan_mgt.wfa.ie.wme.acp.cw.max",
25361 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
25362 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25363
25364 {&hf_ieee80211_wfa_ie_wme_acp_cw_min,
25365 {"CW Min", "wlan_mgt.wfa.ie.wme.acp.cw.min",
25366 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
25367 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25368
25369 {&hf_ieee80211_wfa_ie_wme_acp_txop_limit,
25370 {"TXOP Limit", "wlan_mgt.wfa.ie.wme.acp.txop_limit",
25371 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00,
25372 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25373
25374 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo,
25375 {"TS Info", "wlan_mgt.wfa.ie.wme.tspec.ts_info",
25376 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
25377 "Traffic Stream (TS) Info", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25378
25379 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid,
25380 {"TID", "wlan_mgt.wfa.ie.wme.tspec.ts_info.tid",
25381 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00001E,
25382 "Traffic Stream Info ID (TID)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25383
25384 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction,
25385 {"Direction", "wlan_mgt.wfa.ie.wme.tspec.ts_info.dir",
25386 FT_UINT24, BASE_DEC, VALS(ieee80211_wfa_ie_wme_tspec_tsinfo_direction_vals)(const struct _value_string*)(ieee80211_wfa_ie_wme_tspec_tsinfo_direction_vals
)
, 0x000060,
25387 "Traffic Stream (TS) Info Direction", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25388
25389 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb,
25390 {"PSB", "wlan_mgt.wfa.ie.wme.tspec.ts_info.psb",
25391 FT_UINT24, BASE_DEC, VALS(ieee80211_wfa_ie_wme_tspec_tsinfo_psb_vals)(const struct _value_string*)(ieee80211_wfa_ie_wme_tspec_tsinfo_psb_vals
)
, 0x000400,
25392 "Traffic Stream (TS) Info Power Save Behavior (PSB)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25393
25394 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up,
25395 {"UP", "wlan_mgt.wfa.ie.wme.tspec.ts_info.up",
25396 FT_UINT24, BASE_DEC, VALS(ieee80211_wfa_ie_wme_tspec_tsinfo_up_vals)(const struct _value_string*)(ieee80211_wfa_ie_wme_tspec_tsinfo_up_vals
)
, 0x003800,
25397 "Traffic Stream (TS) Info User Priority (UP)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25398
25399 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved,
25400 {"Reserved", "wlan_mgt.wfa.ie.wme.tspec.ts_info.reserved",
25401 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFFC381,
25402 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25403
25404 {&hf_ieee80211_wfa_ie_wme_tspec_nor_msdu,
25405 {"Normal MSDU Size", "wlan_mgt.wfa.ie.wme.tspec.nor_msdu",
25406 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
25407 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25408
25409 {&hf_ieee80211_wfa_ie_wme_tspec_max_msdu,
25410 {"Maximum MSDU Size", "wlan_mgt.wfa.ie.wme.tspec.max_msdu",
25411 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
25412 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25413
25414 {&hf_ieee80211_wfa_ie_wme_tspec_min_srv,
25415 {"Minimum Service Interval", "wlan_mgt.wfa.ie.wme.tspec.min_srv",
25416 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
25417 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25418
25419 {&hf_ieee80211_wfa_ie_wme_tspec_max_srv,
25420 {"Maximum Service Interval", "wlan_mgt.wfa.ie.wme.tspec.max_srv",
25421 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
25422 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25423
25424 {&hf_ieee80211_wfa_ie_wme_tspec_inact_int,
25425 {"Inactivity Interval", "wlan_mgt.wfa.ie.wme.tspec.inact_int",
25426 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
25427 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25428
25429 {&hf_ieee80211_wfa_ie_wme_tspec_susp_int,
25430 {"Suspension Interval", "wlan_mgt.wfa.ie.wme.tspec.susp_int",
25431 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
25432 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25433
25434 {&hf_ieee80211_wfa_ie_wme_tspec_srv_start,
25435 {"Service Start Time", "wlan_mgt.wfa.ie.wme.tspec.srv_start",
25436 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
25437 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25438
25439 {&hf_ieee80211_wfa_ie_wme_tspec_min_data,
25440 {"Minimum Data Rate", "wlan_mgt.wfa.ie.wme.tspec.min_data",
25441 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
25442 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25443
25444 {&hf_ieee80211_wfa_ie_wme_tspec_mean_data,
25445 {"Mean Data Rate", "wlan_mgt.wfa.ie.wme.tspec.mean_data",
25446 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
25447 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25448
25449 {&hf_ieee80211_wfa_ie_wme_tspec_peak_data,
25450 {"Peak Data Rate", "wlan_mgt.wfa.ie.wme.tspec.peak_data",
25451 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
25452 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25453
25454 {&hf_ieee80211_wfa_ie_wme_tspec_burst_size,
25455 {"Burst Size", "wlan_mgt.wfa.ie.wme.tspec.burst_size",
25456 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
25457 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25458
25459 {&hf_ieee80211_wfa_ie_wme_tspec_delay_bound,
25460 {"Delay Bound", "wlan_mgt.wfa.ie.wme.tspec.delay_bound",
25461 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
25462 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25463
25464 {&hf_ieee80211_wfa_ie_wme_tspec_min_phy,
25465 {"Minimum PHY Rate", "wlan_mgt.wfa.ie.wme.tspec.min_phy",
25466 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
25467 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25468
25469 {&hf_ieee80211_wfa_ie_wme_tspec_surplus,
25470 {"Surplus Bandwidth Allowance", "wlan_mgt.wfa.ie.wme.tspec.surplus",
25471 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
25472 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25473
25474 {&hf_ieee80211_wfa_ie_wme_tspec_medium,
25475 {"Medium Time", "wlan_mgt.wfa.ie.wme.tspec.medium",
25476 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
25477 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25478
25479 {&hf_ieee80211_rsn_ie_pmkid,
25480 {"RSN PMKID", "wlan_mgt.rsn.ie.pmkid",
25481 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
25482 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25483
25484 {&hf_ieee80211_rsn_ie_unknown,
25485 {"RSN Unknown", "wlan_mgt.rsn.ie.unknown",
25486 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
25487 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25488
25489 {&hf_ieee80211_marvell_ie_type,
25490 {"Type", "wlan_mgt.marvell.ie.type",
25491 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
25492 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25493
25494 {&hf_ieee80211_marvell_ie_mesh_subtype,
25495 {"Subtype", "wlan_mgt.marvell.ie.subtype",
25496 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
25497 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25498
25499 {&hf_ieee80211_marvell_ie_mesh_version,
25500 {"Version", "wlan_mgt.marvell.ie.version",
25501 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
25502 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25503
25504 {&hf_ieee80211_marvell_ie_mesh_active_proto_id,
25505 {"Path Selection Protocol", "wlan_mgt.marvell.ie.proto_id",
25506 FT_UINT8, BASE_HEX, VALS(mesh_path_selection_codes)(const struct _value_string*)(mesh_path_selection_codes), 0,
25507 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25508
25509 {&hf_ieee80211_marvell_ie_mesh_active_metric_id,
25510 {"Path Selection Metric", "wlan_mgt.marvell.ie.metric_id",
25511 FT_UINT8, BASE_HEX, VALS(mesh_metric_codes)(const struct _value_string*)(mesh_metric_codes), 0,
25512 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25513
25514 {&hf_ieee80211_marvell_ie_mesh_cap,
25515 {"Mesh Capabilities", "wlan_mgt.marvell.ie.cap",
25516 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
25517 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25518
25519 {&hf_ieee80211_marvell_ie_data,
25520 { "Marvell IE data", "wlan_mgt.marvell.data",
25521 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
25522 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25523
25524 {&hf_ieee80211_atheros_ie_type,
25525 {"Type", "wlan_mgt.atheros.ie.type",
25526 FT_UINT8, BASE_HEX, VALS(atheros_ie_type_vals)(const struct _value_string*)(atheros_ie_type_vals), 0,
25527 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25528
25529 {&hf_ieee80211_atheros_ie_subtype,
25530 {"Subtype", "wlan_mgt.atheros.ie.subtype",
25531 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
25532 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25533
25534 {&hf_ieee80211_atheros_ie_version,
25535 {"Version", "wlan_mgt.atheros.ie.version",
25536 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
25537 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25538
25539 {&hf_ieee80211_atheros_ie_cap_f_turbop,
25540 {"Turbo Prime", "wlan_mgt.ie.atheros.capabilities.turbop",
25541 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_TURBOP,
25542 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25543
25544 {&hf_ieee80211_atheros_ie_cap_f_comp,
25545 {"Compression", "wlan_mgt.ie.atheros.capabilities.comp",
25546 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_COMP,
25547 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25548
25549 {&hf_ieee80211_atheros_ie_cap_f_ff,
25550 {"Fast Frames", "wlan_mgt.ie.atheros.capabilities.ff",
25551 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_FF,
25552 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25553
25554 {&hf_ieee80211_atheros_ie_cap_f_xr,
25555 {"eXtended Range", "wlan_mgt.ie.atheros.capabilities.xr",
25556 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_XR,
25557 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25558
25559 {&hf_ieee80211_atheros_ie_cap_f_ar,
25560 {"Advanced Radar", "wlan_mgt.ie.atheros.capabilities.ar",
25561 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_AR,
25562 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25563
25564 {&hf_ieee80211_atheros_ie_cap_f_burst,
25565 {"Burst", "wlan_mgt.ie.atheros.capabilities.burst",
25566 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_BURST,
25567 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25568
25569 {&hf_ieee80211_atheros_ie_cap_f_wme,
25570 {"CWMin tuning", "wlan_mgt.ie.atheros.capabilities.wme",
25571 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_WME,
25572 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25573
25574 {&hf_ieee80211_atheros_ie_cap_f_boost,
25575 {"Boost", "wlan_mgt.ie.atheros.capabilities.boost",
25576 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_BOOST,
25577 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25578
25579 {&hf_ieee80211_atheros_ie_advcap_cap,
25580 {"Capabilities", "wlan_mgt.atheros.ie.advcap.cap",
25581 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
25582 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25583
25584 {&hf_ieee80211_atheros_ie_advcap_defkey,
25585 {"Default key index", "wlan_mgt.atheros.ie.advcap.defkey",
25586 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
25587 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25588
25589 {&hf_ieee80211_atheros_ie_xr_info,
25590 {"Info", "wlan_mgt.atheros.ie.xr.info",
25591 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
25592 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25593
25594 {&hf_ieee80211_atheros_ie_xr_base_bssid,
25595 {"Base BSS Id", "wlan_mgt.atheros.ie.xr.base_bssid",
25596 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
25597 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25598
25599 {&hf_ieee80211_atheros_ie_xr_xr_bssid,
25600 {"XR BSS Id", "wlan_mgt.atheros.ie.xr.xr_bssid",
25601 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
25602 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25603
25604 {&hf_ieee80211_atheros_ie_xr_xr_beacon,
25605 {"XR Beacon Interval", "wlan_mgt.atheros.ie.xr.xr_beacon",
25606 FT_UINT32, BASE_CUSTOM, CF_FUNC(beacon_interval_base_custom)((const void *) (gsize) (beacon_interval_base_custom)), 0,
25607 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25608
25609 {&hf_ieee80211_atheros_ie_xr_base_cap,
25610 {"Base capabilities", "wlan_mgt.atheros.ie.xr.base_cap",
25611 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
25612 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25613
25614 {&hf_ieee80211_atheros_ie_xr_xr_cap,
25615 {"XR capabilities", "wlan_mgt.atheros.ie.xr.xr_cap",
25616 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
25617 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25618
25619 {&hf_ieee80211_atheros_ie_data,
25620 {"Atheros IE data", "wlan_mgt.atheros.data",
25621 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
25622 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25623
25624 {&hf_ieee80211_aironet_ie_type,
25625 {"Aironet IE type", "wlan_mgt.aironet.type",
25626 FT_UINT8, BASE_DEC, VALS(aironet_ie_type_vals)(const struct _value_string*)(aironet_ie_type_vals), 0,
25627 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25628
25629 {&hf_ieee80211_aironet_ie_dtpc,
25630 {"Aironet IE CCX DTCP", "wlan_mgt.aironet.dtpc",
25631 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
25632 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25633
25634 {&hf_ieee80211_aironet_ie_version,
25635 {"Aironet IE CCX version", "wlan_mgt.aironet.version",
25636 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
25637 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25638
25639 {&hf_ieee80211_aironet_ie_data,
25640 { "Aironet IE data", "wlan_mgt.aironet.data",
25641 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
25642 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25643
25644 {&hf_ieee80211_qbss_version,
25645 {"QBSS Version", "wlan_mgt.qbss.version",
25646 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
25647 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25648
25649 {&hf_ieee80211_qbss_scount,
25650 {"Station Count", "wlan_mgt.qbss.scount",
25651 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
25652 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25653
25654 {&hf_ieee80211_qbss_cu,
25655 {"Channel Utilization", "wlan_mgt.qbss.cu",
25656 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
25657 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25658
25659 {&hf_ieee80211_qbss_adc,
25660 {"Available Admission Capabilities", "wlan_mgt.qbss.adc",
25661 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
25662 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25663
25664 {&hf_ieee80211_qbss2_cu,
25665 {"Channel Utilization", "wlan_mgt.qbss2.cu",
25666 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
25667 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25668
25669 {&hf_ieee80211_qbss2_gl,
25670 {"G.711 CU Quantum", "wlan_mgt.qbss2.glimit",
25671 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
25672 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25673
25674 {&hf_ieee80211_qbss2_cal,
25675 {"Call Admission Limit", "wlan_mgt.qbss2.cal",
25676 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
25677 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25678
25679 {&hf_ieee80211_qbss2_scount,
25680 {"Station Count", "wlan_mgt.qbss2.scount",
25681 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
25682 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25683
25684 {&hf_ieee80211_aironet_ie_qos_reserved,
25685 {"Aironet IE QoS reserved", "wlan_mgt.aironet.qos.reserved",
25686 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
25687 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25688
25689 {&hf_ieee80211_aironet_ie_qos_paramset,
25690 {"Aironet IE QoS paramset", "wlan_mgt.aironet.qos.paramset",
25691 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
25692 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25693
25694 {&hf_ieee80211_aironet_ie_qos_val,
25695 {"Aironet IE QoS valueset", "wlan_mgt.aironet.qos.val",
25696 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
25697 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25698
25699 {&hf_ieee80211_aironet_ie_clientmfp,
25700 {"Aironet IE Client MFP", "wlan_mgt.aironet.clientmfp",
25701 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)(const struct true_false_string*)(&tfs_enabled_disabled), 0x01,
25702 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25703
25704 /* Vendor Specific : Nintendo */
25705 {&hf_ieee80211_vs_nintendo_type,
25706 {"Type", "wlan_mgt.vs.nintendo.type",
25707 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_nintendo_type_vals)(const struct _value_string*)(ieee80211_vs_nintendo_type_vals
)
, 0,
25708 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25709
25710 {&hf_ieee80211_vs_nintendo_length,
25711 {"Length", "wlan_mgt.vs.nintendo.length",
25712 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
25713 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25714
25715 {&hf_ieee80211_vs_nintendo_servicelist,
25716 {"Servicelist", "wlan_mgt.vs.nintendo.servicelist",
25717 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
25718 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25719
25720 {&hf_ieee80211_vs_nintendo_service,
25721 {"Service", "wlan_mgt.vs.nintendo.service",
25722 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
25723 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25724
25725 {&hf_ieee80211_vs_nintendo_consoleid,
25726 {"Console ID", "wlan_mgt.vs.nintendo.consoleid",
25727 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
25728 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25729
25730 {&hf_ieee80211_vs_nintendo_unknown,
25731 {"Unknown", "wlan_mgt.vs.nintendo.unknown",
25732 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
25733 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25734
25735 /* Vendor Specific : Aruba Networks */
25736 {&hf_ieee80211_vs_aruba_subtype,
25737 {"Subtype", "wlan_mgt.vs.aruba.subtype",
25738 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_aruba_subtype_vals)(const struct _value_string*)(ieee80211_vs_aruba_subtype_vals
)
, 0,
25739 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25740
25741 {&hf_ieee80211_vs_aruba_apname,
25742 {"AP Name", "wlan_mgt.vs.aruba.ap_name",
25743 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0,
25744 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25745
25746 {&hf_ieee80211_vs_aruba_data,
25747 {"Data", "wlan_mgt.vs.aruba.data",
25748 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
25749 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25750
25751 {&hf_ieee80211_vs_mikrotik_unknown,
25752 {"Unknown", "wlan_mgt.vs.mikrotik.unknown",
25753 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
25754 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25755
25756 {&hf_ieee80211_vs_mikrotik_subitem,
25757 {"Sub IE", "wlan_mgt.vs.mikrotik.unknown",
25758 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
25759 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25760
25761 {&hf_ieee80211_vs_mikrotik_subtype,
25762 {"Subtype", "wlan_mgt.vs.mikrotik.subtype",
25763 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
25764 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25765
25766 {&hf_ieee80211_vs_mikrotik_sublength,
25767 {"Sublength", "wlan_mgt.vs.mikrotik.sublength",
25768 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
25769 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25770
25771 {&hf_ieee80211_vs_mikrotik_subdata,
25772 {"Subdata", "wlan_mgt.vs.mikrotik.subdata",
25773 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
25774 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25775
25776 {&hf_ieee80211_tsinfo,
25777 {"Traffic Stream (TS) Info", "wlan_mgt.ts_info",
25778 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
25779 "Traffic Stream (TS) Info field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25780
25781 {&hf_ieee80211_tsinfo_type,
25782 {"Traffic Type", "wlan_mgt.ts_info.type",
25783 FT_UINT24, BASE_DEC, VALS(tsinfo_type)(const struct _value_string*)(tsinfo_type), 0x000001,
25784 "Traffic Stream (TS) Info Traffic Type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25785
25786 {&hf_ieee80211_tsinfo_tsid,
25787 {"Traffic Stream ID (TSID)", "wlan_mgt.ts_info.tsid",
25788 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00001E,
25789 "Traffic Stream ID (TSID) Info TSID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25790
25791 {&hf_ieee80211_tsinfo_dir,
25792 {"Direction", "wlan_mgt.ts_info.dir",
25793 FT_UINT24, BASE_DEC, VALS(tsinfo_direction)(const struct _value_string*)(tsinfo_direction), 0x000060,
25794 "Traffic Stream (TS) Info Direction", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25795
25796 {&hf_ieee80211_tsinfo_access,
25797 {"Access Policy", "wlan_mgt.ts_info.dir",
25798 FT_UINT24, BASE_DEC, VALS(tsinfo_access)(const struct _value_string*)(tsinfo_access), 0x000180,
25799 "Traffic Stream (TS) Info Access Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25800
25801 {&hf_ieee80211_tsinfo_agg,
25802 {"Aggregation", "wlan_mgt.ts_info.agg",
25803 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000200,
25804 "Traffic Stream (TS) Info Access Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25805
25806 {&hf_ieee80211_tsinfo_apsd,
25807 {"Automatic Power-Save Delivery (APSD)", "wlan_mgt.ts_info.apsd",
25808 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000400,
25809 "Traffic Stream (TS) Info Automatic Power-Save Delivery (APSD)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25810
25811 {&hf_ieee80211_tsinfo_up,
25812 {"User Priority", "wlan_mgt.ts_info.up",
25813 FT_UINT24, BASE_DEC, VALS(qos_up)(const struct _value_string*)(qos_up), 0x003800,
25814 "Traffic Stream (TS) Info User Priority", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25815
25816 {&hf_ieee80211_tsinfo_ack,
25817 {"Ack Policy", "wlan_mgt.ts_info.ack",
25818 FT_UINT24, BASE_DEC, VALS(ack_policy)(const struct _value_string*)(ack_policy), 0x00C000,
25819 "Traffic Stream (TS) Info Ack Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25820
25821 {&hf_ieee80211_tsinfo_sched,
25822 {"Schedule", "wlan_mgt.ts_info.sched",
25823 FT_UINT24, BASE_DEC, NULL((void*)0), 0x010000,
25824 "Traffic Stream (TS) Info Schedule", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25825
25826 {&hf_ieee80211_tsinfo_rsv,
25827 {"Reserved", "wlan_mgt.ts_info.rsv",
25828 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFE0000,
25829 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25830
25831 {&hf_ieee80211_tspec_nor_msdu,
25832 {"Normal MSDU Size", "wlan_mgt.tspec.nor_msdu",
25833 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
25834 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25835
25836 {&hf_ieee80211_tspec_max_msdu,
25837 {"Maximum MSDU Size", "wlan_mgt.tspec.max_msdu",
25838 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
25839 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25840
25841 {&hf_ieee80211_tspec_min_srv,
25842 {"Minimum Service Interval", "wlan_mgt.tspec.min_srv",
25843 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
25844 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25845
25846 {&hf_ieee80211_tspec_max_srv,
25847 {"Maximum Service Interval", "wlan_mgt.tspec.max_srv",
25848 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
25849 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25850
25851 {&hf_ieee80211_tspec_inact_int,
25852 {"Inactivity Interval", "wlan_mgt.tspec.inact_int",
25853 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
25854 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25855
25856 {&hf_ieee80211_tspec_susp_int,
25857 {"Suspension Interval", "wlan_mgt.tspec.susp_int",
25858 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
25859 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25860
25861 {&hf_ieee80211_tspec_srv_start,
25862 {"Service Start Time", "wlan_mgt.tspec.srv_start",
25863 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
25864 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25865
25866 {&hf_ieee80211_tspec_min_data,
25867 {"Minimum Data Rate", "wlan_mgt.tspec.min_data",
25868 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
25869 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25870
25871 {&hf_ieee80211_tspec_mean_data,
25872 {"Mean Data Rate", "wlan_mgt.tspec.mean_data",
25873 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
25874 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25875
25876 {&hf_ieee80211_tspec_peak_data,
25877 {"Peak Data Rate", "wlan_mgt.tspec.peak_data",
25878 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
25879 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25880
25881 {&hf_ieee80211_tspec_burst_size,
25882 {"Burst Size", "wlan_mgt.tspec.burst_size",
25883 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
25884 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25885
25886 {&hf_ieee80211_tspec_delay_bound,
25887 {"Delay Bound", "wlan_mgt.tspec.delay_bound",
25888 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
25889 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25890
25891 {&hf_ieee80211_tspec_min_phy,
25892 {"Minimum PHY Rate", "wlan_mgt.tspec.min_phy",
25893 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
25894 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25895
25896 {&hf_ieee80211_tspec_surplus,
25897 {"Surplus Bandwidth Allowance", "wlan_mgt.tspec.surplus",
25898 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
25899 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25900
25901 {&hf_ieee80211_tspec_medium,
25902 {"Medium Time", "wlan_mgt.tspec.medium",
25903 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
25904 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25905
25906 {&hf_ieee80211_tspec_dmg,
25907 {"DMG attributes", "wlan_mgt.tspec.dmg",
25908 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
25909 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25910
25911 {&hf_ieee80211_ts_delay,
25912 {"Traffic Stream (TS) Delay", "wlan_mgt.ts_delay",
25913 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
25914 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25915
25916 {&hf_ieee80211_tclas_process,
25917 {"Processing", "wlan_mgt.tclas_proc.processing",
25918 FT_UINT8, BASE_DEC, VALS(ieee80211_tclas_process_flag)(const struct _value_string*)(ieee80211_tclas_process_flag), 0,
25919 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25920
25921 {&hf_ieee80211_tag_ext_supp_rates,
25922 {"Extended Supported Rates", "wlan_mgt.extended_supported_rates",
25923 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x200, &ieee80211_supported_rates_vals_ext, 0x0,
25924 "In Mbit/sec, (B) for Basic Rates", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25925
25926 {&hf_ieee80211_sched_info,
25927 {"Schedule Info", "wlan_mgt.sched.sched_info",
25928 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
25929 "Schedule Info field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25930
25931 {&hf_ieee80211_sched_info_agg,
25932 {"Schedule Aggregation", "wlan_mgt.sched_info.agg",
25933 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0001,
25934 "Traffic Stream (TS) Info Access Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25935
25936 {&hf_ieee80211_sched_info_tsid,
25937 {"Schedule Traffic Stream ID (TSID)", "wlan_mgt.sched_info.tsid",
25938 FT_UINT16, BASE_DEC, NULL((void*)0), 0x001E,
25939 "Traffic Stream ID (TSID) Info TSID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25940
25941 {&hf_ieee80211_sched_info_dir,
25942 {"Schedule Direction", "wlan_mgt.sched_info.dir",
25943 FT_UINT16, BASE_DEC, VALS(tsinfo_direction)(const struct _value_string*)(tsinfo_direction), 0x0060,
25944 "Traffic Stream (TS) Info Direction", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25945
25946 {&hf_ieee80211_sched_srv_start,
25947 {"Service Start Time", "wlan_mgt.sched.srv_start",
25948 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
25949 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25950
25951 {&hf_ieee80211_sched_srv_int,
25952 {"Service Interval", "wlan_mgt.sched.srv_int",
25953 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
25954 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25955
25956 {&hf_ieee80211_sched_spec_int,
25957 {"Specification Interval", "wlan_mgt.sched.spec_int",
25958 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
25959 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25960
25961 {&hf_ieee80211_aruba,
25962 {"Aruba Type", "wlan_mgt.aruba.type",
25963 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x200, &aruba_mgt_typevals_ext, 0,
25964 "Aruba Management", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25965
25966 {&hf_ieee80211_aruba_hb_seq,
25967 {"Aruba Heartbeat Sequence", "wlan_mgt.aruba.heartbeat_sequence",
25968 FT_UINT64, BASE_DEC, NULL((void*)0), 0,
25969 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25970
25971 {&hf_ieee80211_aruba_mtu,
25972 {"Aruba MTU Size", "wlan_mgt.aruba.mtu_size",
25973 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
25974 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25975
25976 /* Start: HT Control (+HTC) */
25977 {&hf_ieee80211_htc,
25978 {"HT Control (+HTC)", "wlan_mgt.htc",
25979 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
25980 "High Throughput Control (+HTC)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25981
25982 {&hf_ieee80211_htc_vht,
25983 {"VHT", "wlan_mgt.htc.lac.vht",
25984 FT_BOOLEAN, 32, NULL((void*)0), HTC_VHT0x00000001,
25985 "High Throughput Control HT/VHT flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25986
25987 {&hf_ieee80211_htc_lac,
25988 {"Link Adaptation Control (LAC)", "wlan_mgt.htc.lac",
25989 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000FFFE,
25990 "High Throughput Control Link Adaptation Control (LAC)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25991
25992 {&hf_ieee80211_htc_lac_trq,
25993 {"Training Request (TRQ)", "wlan_mgt.htc.lac.trq",
25994 FT_BOOLEAN, 16, TFS(&htc_lac_trq_flag)(const struct true_false_string*)(&htc_lac_trq_flag), 0x0002,
25995 "High Throughput Control Link Adaptation Control Training Request (TRQ)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
25996
25997 {&hf_ieee80211_htc_lac_mai_aseli,
25998 {"Antenna Selection Indication (ASELI)", "wlan_mgt.htc.lac.mai.aseli",
25999 FT_UINT16, BASE_HEX, NULL((void*)0), 0x003C,
26000 "High Throughput Control Link Adaptation Control MAI Antenna Selection Indication", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26001
26002 {&hf_ieee80211_htc_lac_mai_mrq,
26003 {"MCS Request (MRQ)", "wlan_mgt.htc.lac.mai.mrq",
26004 FT_BOOLEAN, 16, TFS(&htc_lac_mai_mrq_flag)(const struct true_false_string*)(&htc_lac_mai_mrq_flag), 0x0004,
26005 "High Throughput Control Link Adaptation Control MAI MCS Request", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26006
26007 {&hf_ieee80211_htc_lac_mai_msi,
26008 {"MCS Request Sequence Identifier (MSI)", "wlan_mgt.htc.lac.mai.msi",
26009 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0038,
26010 "High Throughput Control Link Adaptation Control MAI MCS Request Sequence Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26011
26012 {&hf_ieee80211_htc_lac_mai_reserved,
26013 {"Reserved", "wlan_mgt.htc.lac.mai.reserved",
26014 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0038,
26015 "High Throughput Control Link Adaptation Control MAI Reserved", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26016
26017 {&hf_ieee80211_htc_lac_mfsi,
26018 {"MCS Feedback Sequence Identifier (MFSI)", "wlan_mgt.htc.lac.mfsi",
26019 FT_UINT16, BASE_DEC, NULL((void*)0), 0x01C0,
26020 "High Throughput Control Link Adaptation Control MCS Feedback Sequence Identifier (MSI)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26021
26022 {&hf_ieee80211_htc_lac_asel_command,
26023 {"Antenna Selection (ASEL) Command", "wlan_mgt.htc.lac.asel.command",
26024 FT_UINT16, BASE_HEX, VALS(ieee80211_htc_lac_asel_command_flags)(const struct _value_string*)(ieee80211_htc_lac_asel_command_flags
)
, 0x0E00,
26025 "High Throughput Control Link Adaptation Control Antenna Selection (ASEL) Command", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26026
26027 {&hf_ieee80211_htc_lac_asel_data,
26028 {"Antenna Selection (ASEL) Data", "wlan_mgt.htc.lac.asel.data",
26029 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF000,
26030 "High Throughput Control Link Adaptation Control Antenna Selection (ASEL) Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26031
26032 {&hf_ieee80211_htc_lac_mfb,
26033 {"MCS Feedback (MFB)", "wlan_mgt.htc.lac.mfb",
26034 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFE00,
26035 "High Throughput Control Link Adaptation Control MCS Feedback", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26036
26037 {&hf_ieee80211_htc_cal_pos,
26038 {"Calibration Position", "wlan_mgt.htc.cal.pos",
26039 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_cal_pos_flags)(const struct _value_string*)(ieee80211_htc_cal_pos_flags), 0x00030000,
26040 "High Throughput Control Calibration Position", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26041
26042 {&hf_ieee80211_htc_cal_seq,
26043 {"Calibration Sequence Identifier", "wlan_mgt.htc.cal.seq",
26044 FT_UINT32, BASE_DEC, NULL((void*)0), 0x000C0000,
26045 "High Throughput Control Calibration Sequence Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26046
26047 {&hf_ieee80211_htc_reserved1,
26048 {"Reserved", "wlan_mgt.htc.reserved1",
26049 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00300000,
26050 "High Throughput Control Reserved", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26051
26052 {&hf_ieee80211_htc_csi_steering,
26053 {"CSI/Steering", "wlan_mgt.htc.csi_steering",
26054 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_csi_steering_flags)(const struct _value_string*)(ieee80211_htc_csi_steering_flags
)
, 0x00C00000,
26055 "High Throughput Control CSI/Steering", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26056
26057 {&hf_ieee80211_htc_ndp_announcement,
26058 {"NDP Announcement", "wlan_mgt.htc.ndp_announcement",
26059 FT_BOOLEAN, 32, TFS(&ieee80211_htc_ndp_announcement_flag)(const struct true_false_string*)(&ieee80211_htc_ndp_announcement_flag
)
, 0x01000000,
26060 "High Throughput Control NDP Announcement", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26061
26062 {&hf_ieee80211_htc_reserved2,
26063 {"Reserved", "wlan_mgt.htc.reserved2",
26064 FT_UINT32, BASE_HEX, NULL((void*)0), 0x3E000000,
26065 "High Throughput Control Reserved", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26066
26067 {&hf_ieee80211_htc_mrq,
26068 {"MRQ", "wlan_mgt.htc.mrq",
26069 FT_BOOLEAN, 32, NULL((void*)0), HTC_MRQ0x00000004,
26070 "VHT-MCS feedback request", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26071
26072 {&hf_ieee80211_htc_msi,
26073 {"MSI", "wlan_mgt.htc.msi",
26074 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000038,
26075 "MRQ sequence number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26076
26077 {&hf_ieee80211_htc_msi_stbc_reserved,
26078 {"Reserved", "wlan_mgt.htc.msi_stbc_reserved",
26079 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000038,
26080 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26081
26082 {&hf_ieee80211_htc_compressed_msi,
26083 {"Compressed MSI", "wlan_mgt.htc.compressed_msi",
26084 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000018,
26085 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26086
26087 {&hf_ieee80211_htc_ppdu_stbc_encoded,
26088 {"PPDU was STBC encoded", "wlan_mgt.htc.ppdu_stbc_encoded",
26089 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020,
26090 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26091
26092 {&hf_ieee80211_htc_mfsi,
26093 {"MFSI", "wlan_mgt.htc.mfsi",
26094 FT_BOOLEAN, 32, NULL((void*)0), 0x000001C0,
26095 "MFB sequence identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26096
26097 {&hf_ieee80211_htc_gid_l,
26098 {"GID-L", "wlan_mgt.htc.gid_l",
26099 FT_BOOLEAN, 32, NULL((void*)0), 0x000001C0,
26100 "LSBs of group ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26101
26102 {&hf_ieee80211_htc_mfb,
26103 {"MFB", "wlan_mgt.htc.mfb",
26104 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00FFFE00,
26105 "Recommended MFB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26106
26107 {&hf_ieee80211_htc_num_sts,
26108 {"NUM_STS", "wlan_mgt.htc.num_sts",
26109 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000E00,
26110 "Recommended NUM_STS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26111
26112 {&hf_ieee80211_htc_vht_mcs,
26113 {"VHT-MCS", "wlan_mgt.htc.vht_mcs",
26114 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0000F000,
26115 "Recommended VHT-MCS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26116
26117 {&hf_ieee80211_htc_bw,
26118 {"BW", "wlan_mgt.htc.bw",
26119 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_bw_recommended_vht_mcs_vals)(const struct _value_string*)(ieee80211_htc_bw_recommended_vht_mcs_vals
)
, 0x00030000,
26120 "Bandwidth for recommended VHT-MCS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26121
26122 {&hf_ieee80211_htc_snr,
26123 {"SNR", "wlan_mgt.htc.snr",
26124 FT_INT32, BASE_DEC, NULL((void*)0), 0x00FC0000,
26125 "Average SNR + 22", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26126
26127 {&hf_ieee80211_htc_reserved3,
26128 {"Reserved", "wlan_mgt.htc.reserved3",
26129 FT_UINT32, BASE_HEX, NULL((void*)0), 0x1F000000,
26130 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26131
26132 {&hf_ieee80211_htc_gid_h,
26133 {"GID-H", "wlan_mgt.htc.gid_h",
26134 FT_UINT32, BASE_DEC, NULL((void*)0), 0x07000000,
26135 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26136
26137 {&hf_ieee80211_htc_coding_type,
26138 {"Coding type", "wlan_mgt.htc.coding_type",
26139 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_coding_type_vals)(const struct _value_string*)(ieee80211_htc_coding_type_vals), 0x08000000,
26140 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26141
26142 {&hf_ieee80211_htc_fb_tx_type,
26143 {"FB Tx type", "wlan_mgt.htc.fb_tx_type",
26144 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_fb_tx_type_vals)(const struct _value_string*)(ieee80211_htc_fb_tx_type_vals), 0x10000000,
26145 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26146
26147 {&hf_ieee80211_htc_unsolicited_mfb,
26148 {"Unsolicited MFB", "wlan_mgt.htc.unsolicited_mfb",
26149 FT_BOOLEAN, 32, NULL((void*)0), HTC_UNSOLICITED_MFB0x20000000,
26150 "High Throughput Control Unsolicited MFB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26151
26152 {&hf_ieee80211_htc_ac_constraint,
26153 {"AC Constraint", "wlan_mgt.htc.ac_constraint",
26154 FT_BOOLEAN, 32, NULL((void*)0), 0x40000000,
26155 "High Throughput Control AC Constraint", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26156
26157 {&hf_ieee80211_htc_rdg_more_ppdu,
26158 {"RDG/More PPDU", "wlan_mgt.htc.rdg_more_ppdu",
26159 FT_BOOLEAN, 32, NULL((void*)0), 0x80000000,
26160 "High Throughput Control RDG/More PPDU", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26161 /* End: HT Control (+HTC) */
26162
26163 /* MDIE */
26164 {&hf_ieee80211_tag_mobility_domain_mdid,
26165 {"Mobility Domain Identifier", "wlan_mgt.mobility_domain.mdid",
26166 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
26167 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26168
26169 {&hf_ieee80211_tag_mobility_domain_ft_capab,
26170 {"FT Capability and Policy", "wlan_mgt.mobility_domain.ft_capab",
26171 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
26172 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26173
26174 {&hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds,
26175 {"Fast BSS Transition over DS",
26176 "wlan_mgt.mobility_domain.ft_capab.ft_over_ds",
26177 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01,
26178 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26179
26180 {&hf_ieee80211_tag_mobility_domain_ft_capab_resource_req,
26181 {"Resource Request Protocol Capability",
26182 "wlan_mgt.mobility_domain.ft_capab.resource_req",
26183 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02,
26184 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26185
26186 /* FTIE */
26187 {&hf_ieee80211_tag_ft_mic_control,
26188 {"MIC Control", "wlan_mgt.ft.mic_control",
26189 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
26190 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26191
26192 {&hf_ieee80211_tag_ft_element_count,
26193 {"Element Count", "wlan_mgt.ft.element_count",
26194 FT_UINT16, BASE_DEC, NULL((void*)0), 0xff00,
26195 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26196
26197 {&hf_ieee80211_tag_ft_mic,
26198 {"MIC", "wlan_mgt.ft.mic",
26199 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
26200 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26201
26202 {&hf_ieee80211_tag_ft_anonce,
26203 {"ANonce", "wlan_mgt.ft.anonce",
26204 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
26205 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26206
26207 {&hf_ieee80211_tag_ft_snonce,
26208 {"SNonce", "wlan_mgt.ft.snonce",
26209 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
26210 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26211
26212 {&hf_ieee80211_tag_ft_subelem_id,
26213 {"Subelement ID", "wlan_mgt.ft.subelem.id",
26214 FT_UINT8, BASE_DEC, VALS(ft_subelem_id_vals)(const struct _value_string*)(ft_subelem_id_vals), 0,
26215 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26216
26217 {&hf_ieee80211_tag_ft_subelem_len,
26218 {"Length", "wlan_mgt.ft.subelem.len",
26219 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
26220 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26221
26222 {&hf_ieee80211_tag_ft_subelem_data,
26223 {"Data", "wlan_mgt.ft.subelem.data",
26224 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
26225 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26226
26227 {&hf_ieee80211_tag_ft_subelem_r1kh_id,
26228 {"PMK-R1 key holder identifier (R1KH-ID)", "wlan_mgt.ft.subelem.r1kh_id",
26229 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
26230 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26231
26232 {&hf_ieee80211_tag_ft_subelem_gtk_key_info,
26233 {"Key Info", "wlan_mgt.ft.subelem.gtk.key_info",
26234 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
26235 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26236
26237 {&hf_ieee80211_tag_ft_subelem_gtk_key_id,
26238 {"Key ID", "wlan_mgt.ft.subelem.gtk.key_id",
26239 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0003,
26240 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26241
26242 {&hf_ieee80211_tag_ft_subelem_gtk_key_length,
26243 {"Key Length", "wlan_mgt.ft.subelem.gtk.key_length",
26244 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
26245 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26246
26247 {&hf_ieee80211_tag_ft_subelem_gtk_rsc,
26248 {"RSC", "wlan_mgt.ft.subelem.gtk.rsc",
26249 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
26250 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26251
26252 {&hf_ieee80211_tag_ft_subelem_gtk_key,
26253 {"GTK", "wlan_mgt.ft.subelem.gtk.key",
26254 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
26255 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26256
26257 {&hf_ieee80211_tag_ft_subelem_r0kh_id,
26258 {"PMK-R0 key holder identifier (R0KH-ID)", "wlan_mgt.ft.subelem.r0kh_id",
26259 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
26260 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26261
26262 {&hf_ieee80211_tag_ft_subelem_igtk_key_id,
26263 {"Key ID", "wlan_mgt.ft.subelem.igtk.key_id",
26264 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
26265 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26266
26267 {&hf_ieee80211_tag_ft_subelem_igtk_ipn,
26268 {"IPN", "wlan_mgt.ft.subelem.igtk.ipn",
26269 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
26270 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26271
26272 {&hf_ieee80211_tag_ft_subelem_igtk_key_length,
26273 {"Key Length", "wlan_mgt.ft.subelem.igtk.key_length",
26274 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
26275 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26276
26277 {&hf_ieee80211_tag_ft_subelem_igtk_key,
26278 {"Wrapped Key (IGTK)", "wlan_mgt.ft.subelem.igtk.key",
26279 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26280
26281 /* RIC Data IE: 802.11-2012: 8.4.2.52 */
26282 {&hf_ieee80211_tag_ric_data_id,
26283 {"Resource Handshake Identifier", "wlan_mgt.ric_data.id",
26284 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26285
26286 {&hf_ieee80211_tag_ric_data_desc_cnt,
26287 {"Resource Descriptor Count", "wlan_mgt.ric_data.desc_cnt",
26288 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26289
26290 {&hf_ieee80211_tag_ric_data_status_code,
26291 {"Status Code", "wlan_mgt.ric_data.status_code",
26292 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x200, &ieee80211_status_code_ext, 0,
26293 "Status of requested Resource", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26294
26295 /* OBSS IE: 802.11-2012: 8.4.2.61 */
26296 {&hf_ieee80211_tag_obss_spd,
26297 {"Scan Passive Dwell", "wlan_mgt.obss.spd",
26298 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26299
26300 {&hf_ieee80211_tag_obss_sad,
26301 {"Scan Active Dwell", "wlan_mgt.obss.sad",
26302 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26303
26304 {&hf_ieee80211_tag_obss_cwtsi,
26305 {"Channel Width Trigger Scan Interval", "wlan_mgt.obss.cwtsi",
26306 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26307
26308 {&hf_ieee80211_tag_obss_sptpc,
26309 {"Scan Passive Total Per Channel", "wlan_mgt.obss.sptpc",
26310 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26311
26312 {&hf_ieee80211_tag_obss_satpc,
26313 {"Scan Active Total Per Channel", "wlan_mgt.obss.satpc",
26314 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26315
26316 {&hf_ieee80211_tag_obss_wctdf,
26317 {"Width Channel Transition Delay Factor", "wlan_mgt.obss.wctdf",
26318 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26319
26320 {&hf_ieee80211_tag_obss_sat,
26321 {"Scan Activity Threshold", "wlan_mgt.obss.sat",
26322 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26323
26324 /* RIC Descriptor IE: 802.11-2012: 8.4.2.53 */
26325 {&hf_ieee80211_tag_ric_desc_rsrc_type,
26326 {"Resource Type", "wlan_mgt.ric_desc.rsrc_type",
26327 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26328
26329 {&hf_ieee80211_tag_ric_desc_var_params,
26330 {"Variable Params", "wlan_mgt.ric_desc.var_params",
26331 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26332
26333 /* MMIE */
26334 {&hf_ieee80211_tag_mmie_keyid,
26335 {"KeyID", "wlan_mgt.mmie.keyid",
26336 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26337
26338 {&hf_ieee80211_tag_mmie_ipn,
26339 {"IPN", "wlan_mgt.mmie.ipn",
26340 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26341
26342 {&hf_ieee80211_tag_mmie_mic,
26343 {"MIC", "wlan_mgt.mmie.mic",
26344 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26345
26346 /* WAPI Parameter Set*/
26347 {&hf_ieee80211_tag_wapi_param_set_version,
26348 {"Version", "wlan_mgt.wapi.version",
26349 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
26350 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26351
26352 {&hf_ieee80211_tag_wapi_param_set_akm_suite_count,
26353 {"AKM Suite Count", "wlan_mgt.wapi.akm_suite.count",
26354 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
26355 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26356
26357 {&hf_ieee80211_tag_wapi_param_set_akm_suite_oui,
26358 {"AKM Suite OUI", "wlan_mgt.wapi.akm_suite.oui",
26359 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom)((const void *) (gsize) (oui_base_custom)), 0,
26360 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26361
26362 {&hf_ieee80211_tag_wapi_param_set_akm_suite_type,
26363 {"AKM Suite Type", "wlan_mgt.wapi.akm_suite.type",
26364 FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_suite_type)(const struct _value_string*)(ieee80211_wapi_suite_type) , 0,
26365 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26366
26367 {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count,
26368 {"Unicast Cipher Suite Count", "wlan_mgt.wapi.unicast_cipher.suite.count",
26369 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
26370 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26371
26372 {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui,
26373 {"Unicast Cipher Suite OUI", "wlan_mgt.wapi.unicast_cipher.suite.oui",
26374 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom)((const void *) (gsize) (oui_base_custom)), 0,
26375 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26376
26377 {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type,
26378 {"Unicast Cipher Suite Type", "wlan_mgt.wapi.unicast_cipher.suite.type",
26379 FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_cipher_type)(const struct _value_string*)(ieee80211_wapi_cipher_type) , 0,
26380 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26381
26382 {&hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui,
26383 {"Multicast Cipher Suite OUI", "wlan_mgt.wapi.multicast_cipher.suite.oui",
26384 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom)((const void *) (gsize) (oui_base_custom)), 0,
26385 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26386
26387 {&hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type,
26388 {"Multicast Cipher Suite Type", "wlan_mgt.wapi.multicast_cipher.suite.type",
26389 FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_cipher_type)(const struct _value_string*)(ieee80211_wapi_cipher_type) , 0,
26390 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26391
26392 {&hf_ieee80211_tag_wapi_param_set_capab,
26393 {"WAPI Capability Info", "wlan_mgt.wapi.capab",
26394 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
26395 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26396
26397 {&hf_ieee80211_tag_wapi_param_set_capab_preauth,
26398 {"Supports Preauthentication?", "wlan_mgt.wapi.capab.preauth",
26399 FT_BOOLEAN, 16 , NULL((void*)0), 0x0001,
26400 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26401
26402 {&hf_ieee80211_tag_wapi_param_set_capab_rsvd,
26403 {"Reserved", "wlan_mgt.wapi.capab.rsvd",
26404 FT_UINT16, BASE_DEC , NULL((void*)0), 0xFFFE,
26405 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26406
26407 {&hf_ieee80211_tag_wapi_param_set_bkid_count,
26408 {"No of BKID's", "wlan_mgt.wapi.bkid.count",
26409 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
26410 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26411
26412 {&hf_ieee80211_tag_wapi_param_set_bkid_list,
26413 {"BKID", "wlan_mgt.wapi.bkid",
26414 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
26415 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26416
26417 /* BSS Max Idle Period */
26418 {&hf_ieee80211_tag_bss_max_idle_period,
26419 {"BSS Max Idle Period (1000 TUs)", "wlan_mgt.bss_max_idle.period",
26420 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26421
26422 {&hf_ieee80211_tag_bss_max_idle_options_protected,
26423 {"BSS Max Idle Period Options: Protected Keep-Alive Required",
26424 "wlan_mgt.bss_max_idle.options.protected",
26425 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26426
26427 /* TFS Request */
26428 {&hf_ieee80211_tag_tfs_request_id,
26429 {"TFS ID", "wlan_mgt.tfs_request.id",
26430 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26431
26432 {&hf_ieee80211_tag_tfs_request_ac_delete_after_match,
26433 {"TFS Action Code - Delete after match",
26434 "wlan_mgt.tfs_request.action_code.delete_after_match",
26435 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26436
26437 {&hf_ieee80211_tag_tfs_request_ac_notify,
26438 {"TFS Action Code - Notify",
26439 "wlan_mgt.tfs_request.action_code.notify",
26440 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26441
26442 {&hf_ieee80211_tag_tfs_request_subelem_id,
26443 {"Subelement ID", "wlan_mgt.tfs_request.subelem.id",
26444 FT_UINT8, BASE_DEC, VALS(tfs_request_subelem_ids)(const struct _value_string*)(tfs_request_subelem_ids), 0,
26445 "TFS Request Subelement ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26446
26447 {&hf_ieee80211_tag_tfs_request_subelem_len,
26448 {"Length", "wlan_mgt.tfs_request.subelem.len",
26449 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
26450 "TFS Request Subelement Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26451
26452 {&hf_ieee80211_tag_tfs_request_subelem,
26453 {"Subelement Data", "wlan_mgt.tfs_request.subelem",
26454 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
26455 "TFS Request Subelement Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26456
26457 /* TFS Response */
26458 {&hf_ieee80211_tag_tfs_response_subelem_id,
26459 {"Subelement ID", "wlan_mgt.tfs_response.subelem.id",
26460 FT_UINT8, BASE_DEC, VALS(tfs_response_subelem_ids)(const struct _value_string*)(tfs_response_subelem_ids), 0,
26461 "TFS Response Subelement ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26462
26463 {&hf_ieee80211_tag_tfs_response_subelem_len,
26464 {"Length", "wlan_mgt.tfs_response.subelem.len",
26465 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
26466 "TFS Response Subelement Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26467
26468 {&hf_ieee80211_tag_tfs_response_subelem,
26469 {"Subelement Data", "wlan_mgt.tfs_response.subelem",
26470 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
26471 "TFS Response Subelement Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26472
26473 {&hf_ieee80211_tag_tfs_response_status,
26474 {"TFS Response Status", "wlan_mgt.tfs_response.status",
26475 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26476
26477 {&hf_ieee80211_tag_tfs_response_id,
26478 {"TFS ID", "wlan_mgt.tfs_response.tfs_id",
26479 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26480
26481 /* WNM-Sleep Mode */
26482 {&hf_ieee80211_tag_wnm_sleep_mode_action_type,
26483 {"Action Type", "wlan_mgt.wnm_sleep_mode.action_type",
26484 FT_UINT8, BASE_DEC, VALS(wnm_sleep_mode_action_types)(const struct _value_string*)(wnm_sleep_mode_action_types), 0,
26485 "WNM-Sleep Mode Action Type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26486
26487 {&hf_ieee80211_tag_wnm_sleep_mode_response_status,
26488 {"WNM-Sleep Mode Response Status",
26489 "wlan_mgt.wnm_sleep_mode.response_status",
26490 FT_UINT8, BASE_DEC, VALS(wnm_sleep_mode_response_status_vals)(const struct _value_string*)(wnm_sleep_mode_response_status_vals
)
, 0, NULL((void*)0),
26491 HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26492
26493 {&hf_ieee80211_tag_wnm_sleep_mode_interval,
26494 {"WNM-Sleep Interval", "wlan_mgt.wnm_sleep_mode.interval",
26495 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26496
26497 /* Time Advertisement */
26498 {&hf_ieee80211_tag_time_adv_timing_capab,
26499 {"Timing capabilities", "wlan_mgt.time_adv.timing_capab",
26500 FT_UINT8, BASE_DEC, VALS(time_adv_timing_capab_vals)(const struct _value_string*)(time_adv_timing_capab_vals), 0,
26501 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26502
26503 {&hf_ieee80211_tag_time_adv_time_value,
26504 {"Time Value", "wlan_mgt.time_adv.time_value",
26505 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
26506 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26507
26508 {&hf_ieee80211_tag_time_adv_time_value_year,
26509 {"Time Value: Year", "wlan_mgt.time_adv.time_value.year",
26510 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
26511 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26512
26513 {&hf_ieee80211_tag_time_adv_time_value_month,
26514 {"Time Value: Month", "wlan_mgt.time_adv.time_value.month",
26515 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
26516 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26517
26518 {&hf_ieee80211_tag_time_adv_time_value_day,
26519 {"Time Value: Day", "wlan_mgt.time_adv.time_value.month",
26520 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
26521 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26522
26523 {&hf_ieee80211_tag_time_adv_time_value_hours,
26524 {"Time Value: Hours", "wlan_mgt.time_adv.time_value.hours",
26525 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
26526 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26527
26528 {&hf_ieee80211_tag_time_adv_time_value_minutes,
26529 {"Time Value: Minutes", "wlan_mgt.time_adv.time_value.minutes",
26530 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
26531 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26532
26533 {&hf_ieee80211_tag_time_adv_time_value_seconds,
26534 {"Time Value: Seconds", "wlan_mgt.time_adv.time_value.seconds",
26535 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
26536 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26537
26538 {&hf_ieee80211_tag_time_adv_time_value_milliseconds,
26539 {"Time Value: Milliseconds", "wlan_mgt.time_adv.time_value.milliseconds",
26540 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
26541 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26542
26543 {&hf_ieee80211_tag_time_adv_time_value_reserved,
26544 {"Time Value: Reserved", "wlan_mgt.time_adv.time_value.reserved",
26545 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
26546 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26547
26548 {&hf_ieee80211_tag_time_adv_time_error,
26549 {"Time Error", "wlan_mgt.time_adv.time_error",
26550 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
26551 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26552
26553 {&hf_ieee80211_tag_time_adv_time_update_counter,
26554 {"Time Update Counter", "wlan_mgt.time_adv.time_update_counter",
26555 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
26556 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26557
26558 /* Time Zone */
26559 {&hf_ieee80211_tag_time_zone,
26560 {"Time Zone", "wlan_mgt.time_zone",
26561 FT_STRING, BASE_NONE, NULL((void*)0), 0,
26562 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26563
26564 /* Interworking */
26565 {&hf_ieee80211_tag_interworking_access_network_type,
26566 {"Access Network Type", "wlan_mgt.interworking.access_network_type",
26567 FT_UINT8, BASE_DEC, VALS(access_network_type_vals)(const struct _value_string*)(access_network_type_vals), 0x0f,
26568 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26569
26570 {&hf_ieee80211_tag_interworking_internet,
26571 {"Internet", "wlan_mgt.interworking.internet",
26572 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
26573 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26574
26575 {&hf_ieee80211_tag_interworking_asra,
26576 {"ASRA", "wlan_mgt.interworking.asra",
26577 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
26578 "Additional Step Required for Access", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26579
26580 {&hf_ieee80211_tag_interworking_esr,
26581 {"ESR", "wlan_mgt.interworking.esr",
26582 FT_UINT8, BASE_DEC, NULL((void*)0), 0x40,
26583 "Emergency services reachable", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26584
26585 {&hf_ieee80211_tag_interworking_uesa,
26586 {"UESA", "wlan_mgt.interworking.uesa",
26587 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
26588 "Unauthenticated emergency service accessible", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26589
26590 {&hf_ieee80211_tag_interworking_hessid,
26591 {"HESSID", "wlan_mgt.interworking.hessid",
26592 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
26593 "Homogeneous ESS identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26594
26595 /* QoS Map Set element */
26596 {&hf_ieee80211_tag_qos_map_set_dscp_exc,
26597 {"DSCP Exception", "wlan_mgt.qos_map_set.dscp_exception",
26598 FT_NONE, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26599
26600 {&hf_ieee80211_tag_qos_map_set_dscp_exc_val,
26601 {"DSCP Value", "wlan_mgt.qos_map_set.dscp_value",
26602 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
26603 "DSCP Exception - DSCP Value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26604
26605 {&hf_ieee80211_tag_qos_map_set_dscp_exc_up,
26606 {"User Priority", "wlan_mgt.qos_map_set.up",
26607 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
26608 "DSCP Exception - User Priority", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26609
26610 {&hf_ieee80211_tag_qos_map_set_range,
26611 {"DSCP Range description", "wlan_mgt.qos_map_set.range",
26612 FT_NONE, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26613
26614 {&hf_ieee80211_tag_qos_map_set_low,
26615 {"DSCP Low Value", "wlan_mgt.qos_map_set.dscp_low_value",
26616 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
26617 "DSCP Range description - DSCP Low Value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26618
26619 {&hf_ieee80211_tag_qos_map_set_high,
26620 {"DSCP High Value", "wlan_mgt.qos_map_set.dscp_high_value",
26621 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
26622 "DSCP Range description - DSCP High Value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26623
26624 /* Advertisement Protocol */
26625 {&hf_ieee80211_tag_adv_proto_resp_len_limit,
26626 {"Query Response Length Limit", "wlan_mgt.adv_proto.resp_len_limit",
26627 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7f,
26628 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26629
26630 {&hf_ieee80211_tag_adv_proto_pame_bi,
26631 {"PAME-BI", "wlan_mgt.adv_proto.pame_bi",
26632 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
26633 "Pre-Association Message Xchange BSSID Independent (PAME-BI)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26634
26635 {&hf_ieee80211_tag_adv_proto_id,
26636 {"Advertisement Protocol ID", "wlan_mgt.adv_proto.id",
26637 FT_UINT8, BASE_DEC, VALS(adv_proto_id_vals)(const struct _value_string*)(adv_proto_id_vals), 0,
26638 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26639
26640 {&hf_ieee80211_tag_adv_proto_vs_info,
26641 {"Advertisement Protocol Vendor Specific info", "wlan_mgt.adv_proto.vs_info",
26642 FT_NONE, BASE_NONE, NULL((void*)0), 0,
26643 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26644
26645 /* Roaming Consortium */
26646 {&hf_ieee80211_tag_roaming_consortium_num_anqp_oi,
26647 {"Number of ANQP OIs", "wlan_mgt.roaming_consortium.num_anqp_oi",
26648 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
26649 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26650
26651 {&hf_ieee80211_tag_roaming_consortium_oi1_len,
26652 {"OI #1 Length", "wlan_mgt.roaming_consortium.oi1_len",
26653 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
26654 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26655
26656 {&hf_ieee80211_tag_roaming_consortium_oi2_len,
26657 {"OI #2 Length", "wlan_mgt.roaming_consortium.oi2_len",
26658 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0,
26659 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26660
26661 {&hf_ieee80211_tag_roaming_consortium_oi1,
26662 {"OI #1", "wlan_mgt.roaming_consortium.oi1",
26663 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
26664 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26665
26666 {&hf_ieee80211_tag_roaming_consortium_oi2,
26667 {"OI #2", "wlan_mgt.roaming_consortium.oi2",
26668 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
26669 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26670
26671 {&hf_ieee80211_tag_roaming_consortium_oi3,
26672 {"OI #3", "wlan_mgt.roaming_consortium.oi3",
26673 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
26674 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26675
26676 /* Timeout Interval */
26677 {&hf_ieee80211_tag_timeout_int_type,
26678 {"Timeout Interval Type", "wlan_mgt.timeout_int.type",
26679 FT_UINT8, BASE_DEC, VALS(timeout_int_types)(const struct _value_string*)(timeout_int_types), 0,
26680 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26681
26682 {&hf_ieee80211_tag_timeout_int_value,
26683 {"Timeout Interval Value", "wlan_mgt.timeout_int.value",
26684 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
26685 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26686
26687 /* Link Identifier */
26688 {&hf_ieee80211_tag_link_id_bssid,
26689 {"BSSID", "wlan_mgt.link_id.bssid",
26690 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
26691 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26692
26693 {&hf_ieee80211_tag_link_id_init_sta,
26694 {"TDLS initiator STA Address", "wlan_mgt.link_id.init_sta",
26695 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
26696 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26697
26698 {&hf_ieee80211_tag_link_id_resp_sta,
26699 {"TDLS responder STA Address", "wlan_mgt.link_id.resp_sta",
26700 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
26701 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26702
26703 /* Wakeup Schedule */
26704 {&hf_ieee80211_tag_wakeup_schedule_offset,
26705 {"Offset", "wlan_mgt.wakeup_schedule.offset",
26706 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
26707 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26708
26709 {&hf_ieee80211_tag_wakeup_schedule_interval,
26710 {"Interval", "wlan_mgt.wakeup_schedule.interval",
26711 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
26712 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26713
26714 {&hf_ieee80211_tag_wakeup_schedule_awake_window_slots,
26715 {"Awake Window Slots", "wlan_mgt.wakeup_schedule.awake_window_slots",
26716 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
26717 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26718
26719 {&hf_ieee80211_tag_wakeup_schedule_max_awake_dur,
26720 {"Maximum Awake Window Duration", "wlan_mgt.wakeup_schedule.max_awake_dur",
26721 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
26722 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26723
26724 {&hf_ieee80211_tag_wakeup_schedule_idle_count,
26725 {"Idle Count", "wlan_mgt.wakeup_schedule.idle_count",
26726 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
26727 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26728
26729 /* Channel Switch Timing */
26730 {&hf_ieee80211_tag_channel_switch_timing_switch_time,
26731 {"Switch Time", "wlan_mgt.channel_switch_timing.switch_time",
26732 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
26733 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26734
26735 {&hf_ieee80211_tag_channel_switch_timing_switch_timeout,
26736 {"Switch Timeout", "wlan_mgt.channel_switch_timing.switch_timeout",
26737 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
26738 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26739
26740 /* PTI Control */
26741 {&hf_ieee80211_tag_pti_control_tid,
26742 {"TID", "wlan_mgt.pti_control.tid",
26743 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
26744 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26745
26746 {&hf_ieee80211_tag_pti_control_sequence_control,
26747 {"Sequence Control", "wlan_mgt.pti_control.sequence_control",
26748 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
26749 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26750
26751 /* PU Buffer Status */
26752 {&hf_ieee80211_tag_pu_buffer_status_ac_bk,
26753 {"AC_BK traffic available", "wlan_mgt.pu_buffer_status.ac_bk",
26754 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
26755 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26756
26757 {&hf_ieee80211_tag_pu_buffer_status_ac_be,
26758 {"AC_BE traffic available", "wlan_mgt.pu_buffer_status.ac_be",
26759 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
26760 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26761
26762 {&hf_ieee80211_tag_pu_buffer_status_ac_vi,
26763 {"AC_VI traffic available", "wlan_mgt.pu_buffer_status.ac_vi",
26764 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
26765 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26766
26767 {&hf_ieee80211_tag_pu_buffer_status_ac_vo,
26768 {"AC_VO traffic available", "wlan_mgt.pu_buffer_status.ac_vo",
26769 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
26770 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26771
26772 {&hf_ieee80211_mysterious_olpc_stuff,
26773 {"Mysterious OLPC stuff", "wlan_mgt.mysterious_olpc_stuff",
26774 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
26775 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}
26776
26777 };
26778
26779 static hf_register_info aggregate_fields[] = {
26780 {&hf_ieee80211_amsdu_subframe,
26781 {"A-MSDU Subframe", "wlan_aggregate.a_mdsu.subframe",
26782 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
26783 "Aggregate MAC Service Data Unit (MSDU) Subframe", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
26784
26785 {&hf_ieee80211_amsdu_length,
26786 {"A-MSDU Length", "wlan_aggregate.a_mdsu.length",
26787 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
26788 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}
26789 };
26790
26791 static uat_field_t wep_uat_flds[] = {
26792
26793 UAT_FLD_VS(uat_wep_key_records, key, "Key type", wep_type_vals,{"key", "Key type", PT_TXTMOD_ENUM,{uat_fld_chk_enum,uat_wep_key_records_key_set_cb
,uat_wep_key_records_key_tostr_cb},{&(wep_type_vals),&
(wep_type_vals),&(wep_type_vals)},&(wep_type_vals),"Decryption key type used"
,((void*)0)}
26794 "Decryption key type used"){"key", "Key type", PT_TXTMOD_ENUM,{uat_fld_chk_enum,uat_wep_key_records_key_set_cb
,uat_wep_key_records_key_tostr_cb},{&(wep_type_vals),&
(wep_type_vals),&(wep_type_vals)},&(wep_type_vals),"Decryption key type used"
,((void*)0)}
,
26795 UAT_FLD_CSTRING(uat_wep_key_records, string, "Key",{"string", "Key", PT_TXTMOD_STRING,{uat_fld_chk_str,uat_wep_key_records_string_set_cb
,uat_wep_key_records_string_tostr_cb},{0,0,0},0,"wep:<wep hexadecimal key>\n"
"wpa-pwd:<passphrase>[:<ssid>]\n" "wpa-psk:<wpa hexadecimal key>"
,((void*)0)}
26796 "wep:<wep hexadecimal key>\n"{"string", "Key", PT_TXTMOD_STRING,{uat_fld_chk_str,uat_wep_key_records_string_set_cb
,uat_wep_key_records_string_tostr_cb},{0,0,0},0,"wep:<wep hexadecimal key>\n"
"wpa-pwd:<passphrase>[:<ssid>]\n" "wpa-psk:<wpa hexadecimal key>"
,((void*)0)}
26797 "wpa-pwd:<passphrase>[:<ssid>]\n"{"string", "Key", PT_TXTMOD_STRING,{uat_fld_chk_str,uat_wep_key_records_string_set_cb
,uat_wep_key_records_string_tostr_cb},{0,0,0},0,"wep:<wep hexadecimal key>\n"
"wpa-pwd:<passphrase>[:<ssid>]\n" "wpa-psk:<wpa hexadecimal key>"
,((void*)0)}
26798 "wpa-psk:<wpa hexadecimal key>"){"string", "Key", PT_TXTMOD_STRING,{uat_fld_chk_str,uat_wep_key_records_string_set_cb
,uat_wep_key_records_string_tostr_cb},{0,0,0},0,"wep:<wep hexadecimal key>\n"
"wpa-pwd:<passphrase>[:<ssid>]\n" "wpa-psk:<wpa hexadecimal key>"
,((void*)0)}
,
26799 UAT_END_FIELDS{((void*)0),((void*)0),PT_TXTMOD_NONE,{0,0,0},{0,0,0},0,0,((void
*)0)}
26800 };
26801
26802 static gint *tree_array[] = {
26803 &ett_80211,
26804 &ett_proto_flags,
26805 &ett_cap_tree,
26806 &ett_fc_tree,
26807 &ett_cntrl_wrapper_fc,
26808 &ett_cntrl_wrapper_payload,
26809 &ett_fragments,
26810 &ett_fragment,
26811 &ett_block_ack,
26812 &ett_block_ack_bitmap,
26813 &ett_ath_cap_tree,
26814
26815 &ett_80211_mgt,
26816 &ett_fixed_parameters,
26817 &ett_tagged_parameters,
26818 &ett_tag_bmapctl_tree,
26819 &ett_tag_country_fnm_tree,
26820 &ett_tag_country_rcc_tree,
26821 &ett_qos_parameters,
26822 &ett_qos_ps_buf_state,
26823 &ett_wep_parameters,
26824 &ett_msh_control,
26825 &ett_hwmp_targ_flags_tree,
26826 &ett_mesh_chswitch_flag_tree,
26827 &ett_mesh_config_cap_tree,
26828 &ett_mesh_formation_info_tree,
26829
26830 &ett_rsn_gcs_tree,
26831 &ett_rsn_pcs_tree,
26832 &ett_rsn_sub_pcs_tree,
26833 &ett_rsn_akms_tree,
26834 &ett_rsn_sub_akms_tree,
26835 &ett_rsn_cap_tree,
26836 &ett_rsn_pmkid_tree,
26837 &ett_rsn_gmcs_tree,
26838
26839 &ett_wpa_mcs_tree,
26840 &ett_wpa_ucs_tree,
26841 &ett_wpa_sub_ucs_tree,
26842 &ett_wpa_akms_tree,
26843 &ett_wpa_sub_akms_tree,
26844 &ett_wme_ac,
26845 &ett_wme_aci_aifsn,
26846 &ett_wme_ecw,
26847 &ett_wme_qos_info,
26848
26849 &ett_ht_cap_tree,
26850 &ett_ampduparam_tree,
26851 &ett_mcsset_tree,
26852 &ett_mcsbit_tree,
26853 &ett_htex_cap_tree,
26854 &ett_txbf_tree,
26855 &ett_antsel_tree,
26856 &ett_hta_cap_tree,
26857 &ett_hta_cap1_tree,
26858 &ett_hta_cap2_tree,
26859
26860 &ett_htc_tree,
26861 &ett_mfb_subtree,
26862 &ett_lac_subtree,
26863
26864 &ett_vht_cap_tree,
26865 &ett_vht_mcsset_tree,
26866 &ett_vht_rx_mcsbit_tree,
26867 &ett_vht_tx_mcsbit_tree,
26868 &ett_vht_basic_mcsbit_tree,
26869 &ett_vht_op_tree,
26870 &ett_vht_tpe_info_tree,
26871
26872 &ett_vht_ndp_annc_token_tree,
26873 &ett_vht_ndp_annc_sta_info_tree,
26874
26875 &ett_ff_vhtmimo_cntrl,
26876 &ett_ff_vhtmimo_beamforming_report,
26877 &ett_ff_vhtmimo_beamforming_report_snr,
26878 &ett_ff_vhtmimo_beamforming_report_feedback_matrices,
26879
26880 &ett_vht_grpidmgmt,
26881
26882 &ett_ht_info_delimiter1_tree,
26883 &ett_ht_info_delimiter2_tree,
26884 &ett_ht_info_delimiter3_tree,
26885
26886 &ett_tag_measure_request_mode_tree,
26887 &ett_tag_measure_request_type_tree,
26888 &ett_tag_measure_report_mode_tree,
26889 &ett_tag_measure_report_type_tree,
26890 &ett_tag_measure_report_basic_map_tree,
26891 &ett_tag_measure_report_rpi_tree,
26892 &ett_tag_measure_report_frame_tree,
26893 &ett_tag_measure_reported_frame_tree,
26894 &ett_tag_bss_bitmask_tree,
26895 &ett_tag_dfs_map_tree,
26896 &ett_tag_erp_info_tree,
26897 &ett_tag_ex_cap1,
26898 &ett_tag_ex_cap2,
26899 &ett_tag_ex_cap3,
26900 &ett_tag_ex_cap4,
26901 &ett_tag_ex_cap5,
26902 &ett_tag_ex_cap6,
26903 &ett_tag_ex_cap7,
26904 &ett_tag_ex_cap8,
26905 &ett_tag_ex_cap9,
26906
26907 &ett_tag_rm_cap1,
26908 &ett_tag_rm_cap2,
26909 &ett_tag_rm_cap3,
26910 &ett_tag_rm_cap4,
26911 &ett_tag_rm_cap5,
26912 &ett_tag_tclas_mask_tree,
26913
26914 &ett_tag_supported_channels,
26915
26916 &ett_tag_neighbor_report_bssid_info_tree,
26917 &ett_tag_neighbor_report_bssid_info_capability_tree,
26918 &ett_tag_neighbor_report_sub_tag_tree,
26919
26920 &ett_tag_wapi_param_set_akm_tree,
26921 &ett_tag_wapi_param_set_ucast_tree,
26922 &ett_tag_wapi_param_set_mcast_tree,
26923 &ett_tag_wapi_param_set_preauth_tree,
26924
26925 &ett_tag_time_adv_tree,
26926
26927 &ett_ff_ba_param_tree,
26928 &ett_ff_ba_ssc_tree,
26929 &ett_ff_delba_param_tree,
26930 &ett_ff_qos_info,
26931 &ett_ff_psmp_param_set,
26932 &ett_ff_mimo_cntrl,
26933 &ett_ff_ant_sel,
26934 &ett_mimo_report,
26935 &ett_ff_sm_pwr_save,
26936 &ett_ff_chan_switch_announce,
26937 &ett_ff_ht_info,
26938 &ett_ff_psmp_sta_info,
26939
26940 &ett_tpc,
26941
26942 &ett_msdu_aggregation_parent_tree,
26943 &ett_msdu_aggregation_subframe_tree,
26944
26945 &ett_80211_mgt_ie,
26946 &ett_tsinfo_tree,
26947 &ett_sched_tree,
26948
26949 &ett_fcs,
26950
26951 &ett_adv_proto,
26952 &ett_adv_proto_tuple,
26953 &ett_gas_query,
26954 &ett_gas_anqp,
26955 &ett_nai_realm,
26956 &ett_nai_realm_eap,
26957 &ett_tag_ric_data_desc_ie,
26958 &ett_anqp_vendor_capab,
26959
26960 &ett_hs20_cc_proto_port_tuple,
26961
26962 &ett_ssid_list,
26963
26964 &ett_nintendo,
26965 &ett_mikrotik,
26966
26967 &ett_qos_map_set_exception,
26968 &ett_qos_map_set_range,
26969
26970 /* 802.11ad trees */
26971 &ett_dynamic_alloc_tree,
26972 &ett_ssw_tree,
26973 &ett_bf_tree,
26974 &ett_sswf_tree,
26975 &ett_brp_tree,
26976 &ett_blm_tree,
26977 &ett_bic_tree,
26978 &ett_dmg_params_tree,
26979 &ett_cc_tree,
26980 &ett_rcsi_tree,
26981 &ett_80211_ext,
26982 &ett_allocation_tree,
26983 &ett_sta_info,
26984
26985 &ett_gas_resp_fragment,
26986 &ett_gas_resp_fragments
26987 };
26988
26989 static ei_register_info ei[] = {
26990 { &ei_ieee80211_bad_length,
26991 { "ieee80211.bad_length", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
26992 "Wrong length indicated", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
26993
26994 { &ei_ieee80211_inv_val,
26995 { "ieee80211.invalid_value", PI_MALFORMED0x07000000, PI_WARN0x00600000,
26996 "Invalid value", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
26997
26998 { &ei_ieee80211_tag_number,
26999 { "wlan_mgt.tag.number.unexpected_ie", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
27000 "Unexpected Information Element ID", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27001
27002 { &ei_ieee80211_tag_length,
27003 { "wlan_mgt.tag.length.bad", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
27004 "Bad tag length", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27005
27006 { &ei_ieee80211_extra_data,
27007 { "ieee80211.extra_data", PI_MALFORMED0x07000000, PI_WARN0x00600000,
27008 "Unexpected extra data in the end", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27009
27010 { &ei_ieee80211_ff_anqp_capability,
27011 { "wlan_mgt.fixed.anqp.capability.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
27012 "Invalid vendor-specific ANQP capability", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27013
27014 { &ei_ieee80211_ff_anqp_venue_length,
27015 { "wlan_mgt.fixed.anqp.venue.length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
27016 "Invalid Venue Name Duple length", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27017
27018 { &ei_ieee80211_ff_anqp_roaming_consortium_oi_len,
27019 { "wlan_mgt.fixed.anqp.roaming_consortium.oi_len.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
27020 "Invalid Roaming Consortium OI", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27021
27022 { &ei_ieee80211_ff_anqp_nai_field_len,
27023 { "wlan_mgt.fixed.anqp.nai_realm_list.field_len.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
27024 "Invalid NAI Realm List", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27025
27026 { &ei_ieee80211_ff_anqp_nai_realm_eap_len,
27027 { "wlan_mgt.fixed.naqp_nai_realm_list.eap_method_len.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
27028 "Invalid EAP Method subfield", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27029
27030 { &ei_hs20_anqp_ofn_length,
27031 { "wlan_mgt.hs20.anqp.ofn.length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
27032 "Invalid Operator Friendly Name Duple length", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27033
27034 { &ei_hs20_anqp_nai_hrq_length,
27035 { "wlan_mgt.hs20.anqp.nai_hrq.length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
27036 "Invalid NAI Home Realm Query length", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27037
27038 { &ei_ieee80211_ff_anqp_info_length,
27039 { "wlan_mgt.fixed.anqp.info_length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
27040 "Invalid ANQP Info length", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27041
27042 { &ei_ieee80211_not_enough_room_for_anqp_header,
27043 { "wlan_mgt.fixed.query_length_invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
27044 "Not enough room for ANQP header", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27045
27046 { &ei_ieee80211_ff_query_request_length,
27047 { "wlan_mgt.fixed.query_request_length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
27048 "Invalid Query Request Length", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27049
27050 { &ei_ieee80211_ff_query_response_length,
27051 { "wlan_mgt.fixed.query_response_length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
27052 "Invalid Query Response Length", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27053
27054 { &ei_ieee80211_tag_wnm_sleep_mode_no_key_data,
27055 { "wlan_mgt.wnm_sleep_mode.no_key_data", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
27056 "WNM-Sleep Mode Response is not long enough to include Key Data", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27057
27058 { &ei_ieee80211_tdls_setup_response_malformed,
27059 { "wlan_mgt.tdls_setup_response_malformed", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
27060 "TDLS Setup Response (success) does not include mandatory fields", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27061
27062 { &ei_ieee80211_tdls_setup_confirm_malformed,
27063 { "wlan_mgt.tdls_setup_confirm_malformed", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
27064 "TDLS Setup Confirm (success) does not include mandatory fields", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27065
27066 { &ei_ieee80211_wfa_ie_wme_qos_info_bad_ftype,
27067 { "wlan_mgt.wfa.ie.wme.qos_info.bad_ftype", PI_UNDECODED0x05000000, PI_WARN0x00600000,
27068 "Could not deduce direction to decode correctly", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27069
27070 { &ei_ieee80211_qos_info_bad_ftype,
27071 { "wlan_mgt.qos_info.bad_ftype", PI_UNDECODED0x05000000, PI_WARN0x00600000,
27072 "Could not deduce direction to decode correctly", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27073
27074 { &ei_ieee80211_qos_bad_aifsn,
27075 { "wlan_mgt.qos_info.bad_aifsn", PI_MALFORMED0x07000000, PI_WARN0x00600000,
27076 "Invalid AIFSN", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27077
27078 { &ei_ieee80211_rsn_pcs_count,
27079 { "wlan_mgt.rsn.pcs.count.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
27080 "Pairwise Cipher Suite Count too large", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27081
27082 { &ei_ieee80211_rsn_pmkid_count,
27083 { "wlan_mgt.rsn.akms.count.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
27084 "Auth Key Management (AKM) Suite Count too large", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27085
27086 { &ei_ieee80211_pmkid_count_too_large,
27087 { "wlan_mgt.rsn.pmkid.count.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
27088 "PMKID Count too large", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27089
27090 { &ei_ieee80211_vht_tpe_pwr_info_count,
27091 { "wlan_mgt.vht.tpe.pwr_info.count.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
27092 "Max Tx Pwr Count is Incorrect, should be 0-7", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27093
27094 { &ei_ieee80211_missing_data,
27095 { "ieee80211.missing_data", PI_MALFORMED0x07000000, PI_WARN0x00600000,
27096 "No Request subelements in TFS Request", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27097
27098 { &ei_ieee80211_fc_retry,
27099 { "wlan.fc.retry.expert", PI_SEQUENCE0x02000000, PI_NOTE0x00400000,
27100 "Retransmission (retry)", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27101
27102 { &ei_ieee80211_tag_measure_request_unknown,
27103 { "wlan_mgt.measure.req.unknown.expert", PI_UNDECODED0x05000000, PI_WARN0x00600000,
27104 "Undecoded Measurement Request type (or subtype), Contact Wireshark developers if you want this supported", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27105
27106 { &ei_ieee80211_tag_measure_request_beacon_unknown,
27107 { "wlan_mgt.measure.req.beacon.unknown.expert", PI_UNDECODED0x05000000, PI_WARN0x00600000,
27108 "Unknown Data (not interpreted)", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27109
27110 { &ei_ieee80211_tag_measure_report_unknown,
27111 { "wlan_mgt.measure.req.unknown.expert", PI_UNDECODED0x05000000, PI_WARN0x00600000,
27112 "Undecoded Measurement Report type (or subtype), Contact Wireshark developers if you want this supported", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27113
27114 { &ei_ieee80211_tag_data,
27115 { "wlan_mgt.tag.data.undecoded", PI_UNDECODED0x05000000, PI_NOTE0x00400000,
27116 "Dissector for 802.11 IE Tag code not implemented, Contact Wireshark developers if you want this supported", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27117
27118 { &ei_ieee80211_dmg_subtype,
27119 { "wlan.dmg_subtype.bad", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
27120 "Bad DMG type/subtype", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27121
27122 { &ei_ieee80211_vht_action,
27123 { "wlan_mgt.vht.action.undecoded", PI_UNDECODED0x05000000, PI_NOTE0x00400000,
27124 "All subtype of VHT Action is not yet supported by Wireshark", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27125
27126 { &ei_ieee80211_mesh_peering_unexpected,
27127 { "wlan.peering.unexpected", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
27128 "Unexpected Self-protected action", EXPFILL0, ((void*)0), 0, {0, {"Expert Info", ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
}},
27129 };
27130
27131 expert_module_t *expert_ieee80211;
27132
27133 module_t *wlan_module;
27134
27135 const unsigned char bssid_broadcast_data[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
27136
27137 memset(&wlan_stats, 0, sizeof wlan_stats);
27138
27139 proto_aggregate = proto_register_protocol("IEEE 802.11 wireless LAN aggregate frame",
27140 "IEEE 802.11 Aggregate Data", "wlan_aggregate");
27141 proto_register_field_array(proto_aggregate, aggregate_fields, array_length(aggregate_fields)(sizeof aggregate_fields / sizeof aggregate_fields[0]));
27142
27143 proto_wlan = proto_register_protocol("IEEE 802.11 wireless LAN", "IEEE 802.11", "wlan");
27144 /* Created to remove Decode As confusion */
27145 proto_centrino = proto_register_protocol("IEEE 802.11 wireless LAN (Centrino)", "IEEE 802.11 (Centrino)", "wlan_centrino");
27146 proto_register_field_array(proto_wlan, hf, array_length(hf)(sizeof hf / sizeof hf[0]));
27147
27148 proto_wlan_mgt = proto_register_protocol("IEEE 802.11 wireless LAN management frame",
27149 "IEEE 802.11 MGT", "wlan_mgt");
27150 proto_register_field_array(proto_wlan_mgt, ff, array_length(ff)(sizeof ff / sizeof ff[0]));
27151
27152 proto_wlan_ext = proto_register_protocol("IEEE 802.11 wireless LAN extension frame",
27153 "IEEE 802.11 EXT", "wlan_ext");
27154
27155 proto_register_subtree_array(tree_array, array_length(tree_array)(sizeof tree_array / sizeof tree_array[0]));
27156
27157 expert_ieee80211 = expert_register_protocol(proto_wlan);
27158 expert_register_field_array(expert_ieee80211, ei, array_length(ei)(sizeof ei / sizeof ei[0]));
27159
27160 ieee80211_handle = register_dissector("wlan", dissect_ieee80211, proto_wlan);
27161 register_dissector("wlan_withfcs", dissect_ieee80211_withfcs, proto_wlan);
27162 wlan_withoutfcs_handle = register_dissector("wlan_withoutfcs", dissect_ieee80211_withoutfcs, proto_wlan);
27163 register_dissector("wlan_bsfc", dissect_ieee80211_bsfc, proto_wlan);
27164 register_dissector("wlan_noqos", dissect_ieee80211_noqos, proto_wlan);
27165
27166 register_init_routine(wlan_defragment_init);
27167 register_cleanup_routine(wlan_defragment_cleanup);
27168 register_init_routine(wlan_retransmit_init);
27169 register_init_routine(ieee80211_gas_reassembly_init);
27170
27171 wlan_tap = register_tap("wlan");
27172 register_conversation_table(proto_wlan, TRUE(!(0)), wlan_conversation_packet, wlan_hostlist_packet);
27173
27174 wlan_address_type = address_type_dissector_register("AT_ETHER_WLAN", "WLAN Address", ether_to_str, ether_str_len, NULL((void*)0), wlan_col_filter_str,
27175 ether_len, ether_name_resolution_str, ether_name_resolution_len);
27176 wlan_bssid_address_type = address_type_dissector_register("AT_ETHER_BSSID", "WLAN BSSID Address", ether_to_str, ether_str_len, NULL((void*)0), wlan_bssid_col_filter_str,
27177 ether_len, ether_name_resolution_str, ether_name_resolution_len);
27178 set_address(&bssid_broadcast, wlan_bssid_address_type, 6, bssid_broadcast_data);
27179
27180 /* Register configuration options */
27181 wlan_module = prefs_register_protocol(proto_wlan, init_wepkeys);
27182 prefs_register_bool_preference(wlan_module, "defragment",
27183 "Reassemble fragmented 802.11 datagrams",
27184 "Whether fragmented 802.11 datagrams should be reassembled",
27185 &wlan_defragment);
27186
27187 prefs_register_bool_preference(wlan_module, "ignore_draft_ht",
27188 "Ignore vendor-specific HT elements",
27189 "Don't dissect 802.11n draft HT elements (which might contain duplicate information).",
27190 &wlan_ignore_draft_ht);
27191
27192 prefs_register_bool_preference(wlan_module, "retransmitted",
27193 "Call subdissector for retransmitted 802.11 frames",
27194 "Whether retransmitted 802.11 frames should be subdissected",
27195 &wlan_subdissector);
27196
27197 prefs_register_bool_preference(wlan_module, "check_fcs",
27198 "Assume packets have FCS",
27199 "Some 802.11 cards include the FCS at the end of a packet, others do not.",
27200 &wlan_check_fcs);
27201
27202 prefs_register_bool_preference(wlan_module, "check_checksum",
27203 "Validate the FCS checksum if possible",
27204 "Whether to validate the FCS checksum or not.",
27205 &wlan_check_checksum);
27206
27207 prefs_register_enum_preference(wlan_module, "ignore_wep",
27208 "Ignore the Protection bit",
27209 "Some 802.11 cards leave the Protection bit set even though the packet is decrypted, "
27210 "and some also leave the IV (initialization vector).",
27211 &wlan_ignore_prot, wlan_ignore_prot_options, TRUE(!(0)));
27212
27213 prefs_register_obsolete_preference(wlan_module, "wep_keys");
27214
27215 prefs_register_bool_preference(wlan_module, "enable_decryption",
27216 "Enable decryption", "Enable WEP and WPA/WPA2 decryption",
27217 &enable_decryption);
27218
27219 prefs_register_static_text_preference(wlan_module, "info_decryption_key",
27220 "Key examples: 01:02:03:04:05 (40/64-bit WEP),\n"
27221 "010203040506070809101111213 (104/128-bit WEP),\n"
27222 "MyPassword[:MyAP] (WPA + plaintext password [+ SSID]),\n"
27223 "0102030405...6061626364 (WPA + 256-bit key). "
27224 "Invalid keys will be ignored.",
27225 "Valid key formats");
27226
27227 wep_uat = uat_new("WEP and WPA Decryption Keys",
27228 sizeof(uat_wep_key_record_t), /* record size */
27229 "80211_keys", /* filename */
27230 TRUE(!(0)), /* from_profile */
27231 &uat_wep_key_records, /* data_ptr */
27232 &num_wepkeys_uat, /* numitems_ptr */
27233 UAT_AFFECTS_DISSECTION0x00000001, /* affects dissection of packets, but not set of named fields */
27234 NULL((void*)0), /* help */
27235 uat_wep_key_record_copy_cb, /* copy callback */
27236 uat_wep_key_record_update_cb, /* update callback */
27237 uat_wep_key_record_free_cb, /* free callback */
27238 init_wepkeys, /* post update callback - update the WEP/WPA keys */
27239 wep_uat_flds); /* UAT field definitions */
27240
27241 prefs_register_uat_preference(wlan_module,
27242 "wep_key_table",
27243 "Decryption Keys",
27244 "WEP and pre-shared WPA keys",
27245 wep_uat);
27246}
27247
27248void
27249proto_register_wlan_rsna_eapol(void)
27250{
27251
27252 static hf_register_info hf[] = {
27253 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo,
27254 {"Key Information", "wlan_rsna_eapol.keydes.key_info",
27255 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
27256 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
27257
27258 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_keydes_version,
27259 {"Key Descriptor Version", "wlan_rsna_eapol.keydes.key_info.keydes_version",
27260 FT_UINT16, BASE_DEC, VALS(keydes_version_vals)(const struct _value_string*)(keydes_version_vals), KEY_INFO_KEYDES_VERSION_MASK0x0007,
27261 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
27262
27263 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_type,
27264 {"Key Type", "wlan_rsna_eapol.keydes.key_info.key_type",
27265 FT_BOOLEAN, 16, TFS(&keyinfo_key_type_tfs)(const struct true_false_string*)(&keyinfo_key_type_tfs), KEY_INFO_KEY_TYPE_MASK0x0008,
27266 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
27267
27268 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_index,
27269 {"Key Index", "wlan_rsna_eapol.keydes.key_info.key_index",
27270 FT_UINT16, BASE_DEC, NULL((void*)0), KEY_INFO_KEY_INDEX_MASK0x0030,
27271 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
27272
27273 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_install,
27274 {"Install", "wlan_rsna_eapol.keydes.key_info.install",
27275 FT_BOOLEAN, 16, TFS(&tfs_set_notset)(const struct true_false_string*)(&tfs_set_notset), KEY_INFO_INSTALL_MASK0x0040,
27276 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
27277
27278 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_ack,
27279 {"Key ACK", "wlan_rsna_eapol.keydes.key_info.key_ack",
27280 FT_BOOLEAN, 16, TFS(&tfs_set_notset)(const struct true_false_string*)(&tfs_set_notset), KEY_INFO_KEY_ACK_MASK0x0080,
27281 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
27282
27283 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_mic,
27284 {"Key MIC", "wlan_rsna_eapol.keydes.key_info.key_mic",
27285 FT_BOOLEAN, 16, TFS(&tfs_set_notset)(const struct true_false_string*)(&tfs_set_notset), KEY_INFO_KEY_MIC_MASK0x0100,
27286 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
27287
27288 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_secure,
27289 {"Secure", "wlan_rsna_eapol.keydes.key_info.secure",
27290 FT_BOOLEAN, 16, TFS(&tfs_set_notset)(const struct true_false_string*)(&tfs_set_notset), KEY_INFO_SECURE_MASK0x0200,
27291 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
27292
27293 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_error,
27294 {"Error", "wlan_rsna_eapol.keydes.key_info.error",
27295 FT_BOOLEAN, 16, TFS(&tfs_set_notset)(const struct true_false_string*)(&tfs_set_notset), KEY_INFO_ERROR_MASK0x0400,
27296 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
27297
27298 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_request,
27299 {"Request", "wlan_rsna_eapol.keydes.key_info.request",
27300 FT_BOOLEAN, 16, TFS(&tfs_set_notset)(const struct true_false_string*)(&tfs_set_notset), KEY_INFO_REQUEST_MASK0x0800,
27301 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
27302
27303 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_encrypted_key_data,
27304 {"Encrypted Key Data", "wlan_rsna_eapol.keydes.key_info.encrypted_key_data",
27305 FT_BOOLEAN, 16, TFS(&tfs_set_notset)(const struct true_false_string*)(&tfs_set_notset), KEY_INFO_ENCRYPTED_KEY_DATA_MASK0x1000,
27306 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
27307
27308 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_smk_message,
27309 {"SMK Message", "wlan_rsna_eapol.keydes.key_info.smk_message",
27310 FT_BOOLEAN, 16, TFS(&tfs_set_notset)(const struct true_false_string*)(&tfs_set_notset), KEY_INFO_SMK_MESSAGE_MASK0x2000,
27311 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
27312
27313 {&hf_wlan_rsna_eapol_keydes_key_len,
27314 {"Key Length", "eapol.keydes.key_len",
27315 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
27316 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
27317
27318 {&hf_wlan_rsna_eapol_keydes_replay_counter,
27319 {"Replay Counter", "eapol.keydes.replay_counter",
27320 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
27321 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
27322
27323 {&hf_wlan_rsna_eapol_keydes_key_iv,
27324 {"Key IV", "eapol.keydes.key_iv",
27325 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
27326 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
27327
27328 {&hf_wlan_rsna_eapol_wpa_keydes_nonce,
27329 {"WPA Key Nonce", "wlan_rsna_eapol.keydes.nonce",
27330 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
27331 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
27332
27333 {&hf_wlan_rsna_eapol_wpa_keydes_rsc,
27334 {"WPA Key RSC", "wlan_rsna_eapol.keydes.rsc",
27335 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
27336 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
27337
27338 {&hf_wlan_rsna_eapol_wpa_keydes_id,
27339 {"WPA Key ID", "wlan_rsna_eapol.keydes.id",
27340 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
27341 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
27342
27343 {&hf_wlan_rsna_eapol_wpa_keydes_mic,
27344 {"WPA Key MIC", "wlan_rsna_eapol.keydes.mic",
27345 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
27346 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
27347
27348 {&hf_wlan_rsna_eapol_wpa_keydes_data_len,
27349 {"WPA Key Data Length", "wlan_rsna_eapol.keydes.data_len",
27350 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
27351 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
27352
27353 {&hf_wlan_rsna_eapol_wpa_keydes_data,
27354 {"WPA Key Data", "wlan_rsna_eapol.keydes.data",
27355 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
27356 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
27357 };
27358
27359 static gint *tree_array[] = {
27360 &ett_keyinfo,
27361 &ett_wlan_rsna_eapol_keydes_data,
27362 };
27363
27364 proto_wlan_rsna_eapol = proto_register_protocol("IEEE 802.11 RSNA EAPOL key",
27365 "802.11 RSNA EAPOL", "wlan_rsna_eapol");
27366 proto_register_field_array(proto_wlan_rsna_eapol, hf, array_length(hf)(sizeof hf / sizeof hf[0]));
27367
27368 proto_register_subtree_array(tree_array, array_length(tree_array)(sizeof tree_array / sizeof tree_array[0]));
27369}
27370
27371void
27372proto_reg_handoff_ieee80211(void)
27373{
27374 dissector_handle_t data_encap_handle, centrino_handle;
27375 dissector_handle_t wlan_rsna_eapol_wpa_key_handle, wlan_rsna_eapol_rsn_key_handle;
27376
27377 /*
27378 * Get handles for the LLC, IPX and Ethernet dissectors.
27379 */
27380 llc_handle = find_dissector_add_dependency("llc", proto_wlan);
27381 ipx_handle = find_dissector_add_dependency("ipx", proto_wlan);
27382 eth_withoutfcs_handle = find_dissector_add_dependency("eth_withoutfcs", proto_wlan);
27383
27384 dissector_add_uint("wtap_encap", WTAP_ENCAP_IEEE_802_1120, ieee80211_handle);
27385
27386 centrino_handle = create_dissector_handle( dissect_ieee80211_centrino, proto_centrino );
27387 dissector_add_uint("ethertype", ETHERTYPE_CENTRINO_PROMISC0x2452, centrino_handle);
27388
27389 register_capture_dissector("wtap_encap", WTAP_ENCAP_IEEE_802_1120, capture_ieee80211, proto_wlan);
27390 register_capture_dissector("wtap_encap", WTAP_ENCAP_IEEE_802_11_WITH_RADIO22, capture_ieee80211, proto_wlan);
27391 register_capture_dissector("ppi", 105 /* DLT_DLT_IEEE802_11 */, capture_ieee80211, proto_wlan);
27392
27393 /* Register handoff to Aruba GRE */
27394 dissector_add_uint("gre.proto", GRE_ARUBA_82000x8200, wlan_withoutfcs_handle);
27395 dissector_add_uint("gre.proto", GRE_ARUBA_82100x8210, wlan_withoutfcs_handle);
27396 dissector_add_uint("gre.proto", GRE_ARUBA_82200x8220, wlan_withoutfcs_handle);
27397 dissector_add_uint("gre.proto", GRE_ARUBA_82300x8230, wlan_withoutfcs_handle);
27398 dissector_add_uint("gre.proto", GRE_ARUBA_82400x8240, wlan_withoutfcs_handle);
27399 dissector_add_uint("gre.proto", GRE_ARUBA_82500x8250, wlan_withoutfcs_handle);
27400 dissector_add_uint("gre.proto", GRE_ARUBA_82600x8260, wlan_withoutfcs_handle);
27401 dissector_add_uint("gre.proto", GRE_ARUBA_82700x8270, wlan_withoutfcs_handle);
27402 dissector_add_uint("gre.proto", GRE_ARUBA_82800x8280, wlan_withoutfcs_handle);
27403 dissector_add_uint("gre.proto", GRE_ARUBA_82900x8290, wlan_withoutfcs_handle);
27404 dissector_add_uint("gre.proto", GRE_ARUBA_82A00x82A0, wlan_withoutfcs_handle);
27405 dissector_add_uint("gre.proto", GRE_ARUBA_82B00x82B0, wlan_withoutfcs_handle);
27406 dissector_add_uint("gre.proto", GRE_ARUBA_82C00x82C0, wlan_withoutfcs_handle);
27407 dissector_add_uint("gre.proto", GRE_ARUBA_82D00x82D0, wlan_withoutfcs_handle);
27408 dissector_add_uint("gre.proto", GRE_ARUBA_82E00x82E0, wlan_withoutfcs_handle);
27409 dissector_add_uint("gre.proto", GRE_ARUBA_82F00x82F0, wlan_withoutfcs_handle);
27410 dissector_add_uint("gre.proto", GRE_ARUBA_83000x8300, wlan_withoutfcs_handle);
27411 dissector_add_uint("gre.proto", GRE_ARUBA_83100x8310, wlan_withoutfcs_handle);
27412 dissector_add_uint("gre.proto", GRE_ARUBA_83200x8320, wlan_withoutfcs_handle);
27413 dissector_add_uint("gre.proto", GRE_ARUBA_83300x8330, wlan_withoutfcs_handle);
27414 dissector_add_uint("gre.proto", GRE_ARUBA_83400x8340, wlan_withoutfcs_handle);
27415 dissector_add_uint("gre.proto", GRE_ARUBA_83500x8350, wlan_withoutfcs_handle);
27416 dissector_add_uint("gre.proto", GRE_ARUBA_83600x8360, wlan_withoutfcs_handle);
27417 dissector_add_uint("gre.proto", GRE_ARUBA_83700x8370, wlan_withoutfcs_handle);
27418
27419 data_encap_handle = create_dissector_handle(dissect_data_encap, proto_wlan);
27420 dissector_add_uint("ethertype", ETHERTYPE_IEEE80211_DATA_ENCAP0x890d,
27421 data_encap_handle);
27422
27423 /*
27424 * EAPOL key descriptor types.
27425 */
27426 wlan_rsna_eapol_wpa_key_handle = create_dissector_handle(dissect_wlan_rsna_eapol_wpa_or_rsn_key,
27427 proto_wlan_rsna_eapol);
27428 dissector_add_uint("eapol.keydes.type", EAPOL_WPA_KEY254, wlan_rsna_eapol_wpa_key_handle);
27429 wlan_rsna_eapol_rsn_key_handle = create_dissector_handle(dissect_wlan_rsna_eapol_wpa_or_rsn_key,
27430 proto_wlan_rsna_eapol);
27431 dissector_add_uint("eapol.keydes.type", EAPOL_RSN_KEY2, wlan_rsna_eapol_rsn_key_handle);
27432
27433 dissector_add_uint("sflow_245.header_protocol", SFLOW_5_HEADER_80211_MAC15, wlan_withoutfcs_handle);
27434}
27435
27436/*
27437 * Editor modelines
27438 *
27439 * Local Variables:
27440 * c-basic-offset: 2
27441 * tab-width: 8
27442 * indent-tabs-mode: nil
27443 * End:
27444 *
27445 * ex: set shiftwidth=2 tabstop=8 expandtab:
27446 * :indentSize=2:tabSize=8:noTabs=true:
27447 */